Flair 在鲲鹏处理器和 Euler 操作系统上的环境配置及应用部署心得
一、背景介绍
Flair 是一个开源的自然语言处理(NLP)框架,旨在为研究人员提供用于各种文本分析任务的灵活高效的工具集。Flair 的框架构建在 PyTorch 上,支持多种 NLP 常见应用场景,例如命名实体识别(NER)、情感分析、词性标记(PoS)、语义消歧和分类。本文将详细介绍如何在华为的昇腾 NPU、鲲鹏处理器和 Euler 操作系统上配置 Flair 环境,并部署一个基于 Flair 的命名实体识别和情感分析应用。
二、技术挑战
(由于昇腾NPU资源售罄,所以本次主要是在鲲鹏处理器和Euler 操作系统上进行部署。)
在鲲鹏处理器和 Euler 操作系统上配置 Flair 环境面临以下主要挑战:
- 硬件兼容性:鲲鹏处理器的架构与传统的 x86 架构不同,需要确保所有依赖库和框架能够正确安装和运行。
- 软件兼容性:Euler 操作系统可能与其他 Linux 发行版存在差异,需要确保所有依赖库和工具能够在 Euler 上正常工作。
- 模型下载:由于网络限制,Hugging Face 等国外模型库在国内访问受限,需要寻找替代方案下载预训练模型。
三、解决方案
1. 环境准备
1.1 创建 ECS 实例
- 登录华为云控制台。
- 创建一个新的 ECS 实例,选择支持鲲鹏处理器的实例类型。
- 配置实例规格,选择 Euler 操作系统。
- 配置安全组规则,允许必要的端口访问(如 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 桶并上传文件
- 登录华为云控制台,进入 OBS 服务。
- 新建桶,选择华北-北京四区域。
- 上传
main.py
和gradio_show.py
文件到 OBS 桶。
4.2 下载 obsutil 并配置
- 下载 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
- 配置 obsutil:
./obsutil config -i=<your_ak> -k=<your_sk> -e=https://obs.cn-north-4.myhuaweicloud.com
- 从 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 的命名实体识别和情感分析应用。在这个过程中,我们遇到了一些技术挑战,但通过合理配置和优化,最终实现了预期目标。以下是几点心得:
- 硬件兼容性:鲲鹏处理器的架构与传统 x86 架构不同,需要特别注意依赖库的兼容性。使用官方提供的工具和文档可以有效解决这些问题。
- 软件兼容性:Euler 操作系统与常见的 Linux 发行版存在差异,需要仔细阅读官方文档,选择arm64版本的软件工具,确保所有依赖库和工具能够在 Euler 上正常工作。
- 模型下载:由于网络限制,Hugging Face 等国外模型库在国内访问受限。通过设置国内镜像和手动下载模型,可以有效解决这一问题。
- 点赞
- 收藏
- 关注作者
评论(0)