hanlp在华为云aarch64架构上不能正常使用

你好, 我在华为云aarch64架构(鲲鹏计算)上使用编译方式安装了tensorflow2.4, 以及pytorch后, 安装均使用tensorflow 安装指引中的进行安装, conda使用了miniforge3

https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh

各种踩坑安装后, hanlp也成功运行起来, 但是测试结果如下所示(分词炸了, 然后所有的实体识别都返回了NR)

(base) [root@c1437cf647c3 miniforge3]# python
Python 3.8.6 | packaged by conda-forge | (default, Dec 26 2020, 04:32:20) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import hanlp
>>> HanLP = hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH)
>>> HanLP(['2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。', '阿婆主来到北京立方庭参观自然语义科技公司。'])
{'tok/fine': [['2021', '年', 'Han', 'LP', 'v', '2', '.', '1', '为', '生', '产', '环', '境', '带', '来', '次', '世', '代', '最', '先', '进', '的', '多', '语', '种', 'N', 'LP', '技', '术', '。'], ['阿', '婆', '主', '来', '到', '北', '京', '立', '方', '庭', '参', '观', '自', '然', '语', '义', '科', '技', '公', '司', '。']], 'tok/coarse': [['2021年', 'Han', 'LP', 'v', '2', '.', '1', '为', '生', '产', '环', '境', '带', '来', '次世代', '最', '先', '进', '的', '多语种', 'N', 'LP', '技', '术', '。'], ['阿婆主', '来', '到', '北', '京', '立', '方', '庭', '参', '观', '自', '然', '语', '义', '科', '技', '公', '司', '。']], 'pos/ctb': [['NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR'], ['NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR', 'NR']], 'pos/pku': [['v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v'], ['v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v', 'v']], 'pos/863': [['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w'], ['w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w', 'w']], 'ner/pku': [[], []], 'ner/msra': [[], []], 'ner/ontonotes': [[], []], 'srl': [[], []], 'dep': [[(0, 'nn'), (1, 'nn'), (2, 'nn'), (3, 'nn'), (4, 'nn'), (5, 'nn'), (6, 'nn'), (7, 'nn'), (8, 'nn'), (9, 'nn'), (10, 'nn'), (11, 'nn'), (12, 'nn'), (13, 'nn'), (14, 'nn'), (15, 'nn'), (16, 'nn'), (17, 'nn'), (18, 'nn'), (19, 'nn'), (20, 'nn'), (21, 'nn'), (22, 'nn'), (23, 'nn'), (24, 'nn'), (25, 'nn'), (26, 'nn'), (27, 'nn'), (28, 'nn'), (29, 'nn')], [(0, 'nn'), (1, 'nn'), (2, 'nn'), (3, 'nn'), (4, 'nn'), (5, 'nn'), (6, 'nn'), (7, 'nn'), (8, 'nn'), (9, 'nn'), (10, 'nn'), (11, 'nn'), (12, 'nn'), (13, 'nn'), (14, 'nn'), (15, 'nn'), (16, 'nn'), (17, 'nn'), (18, 'nn'), (19, 'nn'), (20, 'nn')]], 'sdp': [[[(2, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')]], [[(2, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')], [(1, 'Nmod')]]], 'con': [['TOP', [['NR', ['2021']], ['NR', ['年']], ['NR', ['Han']], ['NR', ['LP']], ['NR', ['v']], ['NR', ['2']], ['NR', ['.']], ['NR', ['1']], ['NR', ['为']], ['NR', ['生']], ['NR', ['产']], ['NR', ['环']], ['NR', ['境']], ['NR', ['带']], ['NR', ['来']], ['NR', ['次']], ['NR', ['世']], ['NR', ['代']], ['NR', ['最']], ['NR', ['先']], ['NR', ['进']], ['NR', ['的']], ['NR', ['多']], ['NR', ['语']], ['NR', ['种']], ['NR', ['N']], ['NR', ['LP']], ['NR', ['技']], ['NR', ['术']], ['NR', ['。']]]], ['TOP', [['NR', ['阿']], ['NR', ['婆']], ['NR', ['主']], ['NR', ['来']], ['NR', ['到']], ['NR', ['北']], ['NR', ['京']], ['NR', ['立']], ['NR', ['方']], ['NR', ['庭']], ['NR', ['参']], ['NR', ['观']], ['NR', ['自']], ['NR', ['然']], ['NR', ['语']], ['NR', ['义']], ['NR', ['科']], ['NR', ['技']], ['NR', ['公']], ['NR', ['司']], ['NR', ['。']]]]]}
>>> 

我系统是 CentOS7 aarch64, 在docker中安装, 使用的docker镜像是 centos:7

不知可否提供一点协助, 我搜索了论坛以及github的issue, 并没有获得有效的aarch, arm相关疑问的解答…

1 Like

有趣,还是第一次请说arm也能跑PyTorch。

分词的问题可能是transformers出错了,你试试:

from transformers import *

tokenizer = AutoTokenizer.from_pretrained('bert-base-chinese', use_fast=True)
print(tokenizer.encode_plus("2021年HanLPv2.1为生产环境带来次世代最先进的多语种NLP技术。", add_special_tokens=True, return_offsets_mapping=True))

Nvidia的Jetson系列都是ARM的,官方有pytorch的docker镜像。比如Nvidia家的ARM版带CUDA加速的pytorch
不过华为的真第一次听说,这个也不知道支持硬件加速么。

1 Like

受教了,我手头没有arm机器所以没法测试。