Flair 在鲲鹏处理器和 Euler 操作系统上的环境配置及应用部署心得

举报
p_xcn 发表于 2024/10/23 10:20:37 2024/10/23
【摘要】 Flair 是一个开源的自然语言处理(NLP)框架,旨在为研究人员提供用于各种文本分析任务的灵活高效的工具集。Flair 的框架构建在 PyTorch 上,支持多种 NLP 常见应用场景,例如命名实体识别(NER)、情感分析、词性标记(PoS)、语义消歧和分类。本文将详细介绍如何在华为的昇腾 NPU、鲲鹏处理器和 Euler 操作系统上配置 Flair 环境。

一、背景介绍

Flair 是一个开源的自然语言处理(NLP)框架,旨在为研究人员提供用于各种文本分析任务的灵活高效的工具集。Flair 的框架构建在 PyTorch 上,支持多种 NLP 常见应用场景,例如命名实体识别(NER)、情感分析、词性标记(PoS)、语义消歧和分类。本文将详细介绍如何在华为的昇腾 NPU、鲲鹏处理器和 Euler 操作系统上配置 Flair 环境,并部署一个基于 Flair 的命名实体识别和情感分析应用。

二、技术挑战

(由于昇腾NPU资源售罄,所以本次主要是在鲲鹏处理器和Euler 操作系统上进行部署。)

在鲲鹏处理器和 Euler 操作系统上配置 Flair 环境面临以下主要挑战:

  1. 硬件兼容性:鲲鹏处理器的架构与传统的 x86 架构不同,需要确保所有依赖库和框架能够正确安装和运行。
  2. 软件兼容性:Euler 操作系统可能与其他 Linux 发行版存在差异,需要确保所有依赖库和工具能够在 Euler 上正常工作。
  3. 模型下载:由于网络限制,Hugging Face 等国外模型库在国内访问受限,需要寻找替代方案下载预训练模型。

三、解决方案

1. 环境准备

1.1 创建 ECS 实例

  1. 登录华为云控制台。
  2. 创建一个新的 ECS 实例,选择支持鲲鹏处理器的实例类型。
  3. 配置实例规格,选择 Euler 操作系统。
  4. 配置安全组规则,允许必要的端口访问(如 22 端口用于 SSH,7860 端口用于 Gradio 应用)。
2. 安装 Flair 及其依赖

2.1 安装 Flair

从 GitHub 拉取代码,使用pip命令安装所有依赖项。

pip install -r requirements.txt
pip install gensim
pip install torch==1.10.0
pip install markupsafe==2.0.1

2.2 安装 Hugging Face Hub 国内镜像

由于 Hugging Face 不支持国内访问,需要设置 Hugging Face 的国内镜像地址:

export HF_ENDPOINT=https://hf-mirror.com
pip install huggingface_hub

2.3 下载预训练模型

wget https://nlp.informatik.hu-berlin.de/resources/models/ner/en-ner-conll03-v0.4.pt -O ./models/en-ner-conll03-v0.4.pt
wget https://nlp.informatik.hu-berlin.de/resources/models/sentiment-curated-distilbert/sentiment-en-mix-distillbert_4.pt -O ./models/sentiment-en-mix-distillbert_4.pt

使用 Hugging Face CLI 下载token分词器:

huggingface-cli download distilbert-base-uncased

之后将下载的模型文件移动到模型目录。

3. 编写和优化代码

3.1 编写主程序

创建 main.py 文件,加载命名实体识别和情感分析模型,并处理输入句子:

from flair.data import Sentence
from flair.models import SequenceTagger, TextClassifier

# 加载命名实体识别模型和情感分析模型
tagger = SequenceTagger.load("/path/to/your/models/en-ner-conll03-v0.4.pt")
classifier = TextClassifier.load("/path/to/your/models/sentiment-en-mix-distillbert_4.pt")

# 输入语句
print('Please enter the sentence to be analyzed:')
inputs = input()

# NER
tagger_sentence = Sentence(inputs)
tagger.predict(tagger_sentence)
print(tagger_sentence.labels)

# SA
classifier_sentence = Sentence(inputs)
classifier.predict(classifier_sentence)
print(classifier_sentence.labels)

3.2 编写 Gradio 应用

创建 gradio_show.py 文件,使用 Gradio 构建 Web 应用界面:

import gradio as gr
from flair.data import Sentence
from flair.models import SequenceTagger, TextClassifier

# 加载命名实体识别模型和情感分析模型
tagger = SequenceTagger.load("/path/to/your/models/en-ner-conll03-v0.4.pt")
classifier = TextClassifier.load("/path/to/your/models/sentiment-en-mix-distillbert_4.pt")

def analyze_sentence(input_text):
    # 创建 Sentence 对象
    tagger_sentence = Sentence(input_text)
    classifier_sentence = Sentence(input_text)

    # 使用命名实体识别模型进行预测
    tagger.predict(tagger_sentence)

    # 提取 NER 结果
    ner_result = "\n".join([str(label) for label in tagger_sentence.labels])

    # 使用情感分析模型进行预测
    classifier.predict(classifier_sentence)
    sentiment_result = "\n".join([str(label.value) for label in classifier_sentence.labels])

    return ner_result, sentiment_result

# 创建 Gradio 界面
iface = gr.Interface(
    fn=analyze_sentence,
    inputs=gr.Textbox(label="Enter a sentence"),
    outputs=[
        gr.Textbox(label="Named Entities"),
        gr.Textbox(label="Sentiment Analysis")
    ],
    examples=[
        ["Our family took a trip to Washington DC and Hawaii this summer and it was a memorable one."]
    ],
    title="Sentence Analysis with Flair",
    description="Input a sentence and see the named entities and sentiment analysis results."
)

# 启动 Gradio 应用
iface.launch(server_name="0.0.0.0", server_port=7860)
4. 上传代码到 ECS

4.1 创建 OBS 桶并上传文件

  1. 登录华为云控制台,进入 OBS 服务。
  2. 新建桶,选择华北-北京四区域。
  3. 上传 main.py  gradio_show.py 文件到 OBS 桶。

4.2 下载 obsutil 并配置

  1. 下载 obsutil:
wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_arm64.tar.gz
tar -xzvf obsutil_linux_arm64.tar.gz
cd obsutil_linux_arm64_5.5.12
chmod 755 obsutil
  1. 配置 obsutil:
./obsutil config -i=<your_ak> -k=<your_sk> -e=https://obs.cn-north-4.myhuaweicloud.com
  1. 从 OBS 下载文件:
./obsutil cp obs://your-bucket/path/to/code /path/to/your/project -f -r
5. 运行代码

5.1 运行主程序

在 ECS 实例中运行 main.py 文件:

python /path/to/your/project/main.py

5.2 运行 Gradio 应用

在 ECS 实例中运行 gradio_show.py 文件:

nohup python3 /path/to/your/project/gradio_show.py &

5.3 访问 Gradio 应用

通过浏览器访问 Gradio 应用:

http://<your_ecs_public_ip>:7860

四、心得总结

通过本次实践,我们成功在华为的鲲鹏处理器和 Euler 操作系统上配置了 Flair 环境,并部署了一个基于 Flair 的命名实体识别和情感分析应用。在这个过程中,我们遇到了一些技术挑战,但通过合理配置和优化,最终实现了预期目标。以下是几点心得:

  1. 硬件兼容性:鲲鹏处理器的架构与传统 x86 架构不同,需要特别注意依赖库的兼容性。使用官方提供的工具和文档可以有效解决这些问题。
  2. 软件兼容性:Euler 操作系统与常见的 Linux 发行版存在差异,需要仔细阅读官方文档,选择arm64版本的软件工具,确保所有依赖库和工具能够在 Euler 上正常工作。
  3. 模型下载:由于网络限制,Hugging Face 等国外模型库在国内访问受限。通过设置国内镜像和手动下载模型,可以有效解决这一问题。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。