InternLM2.5基于Ascend NPU的环境配置及应用部署心得

举报
yd_254538132 发表于 2024/11/20 16:52:25 2024/11/20
【摘要】 一、任务需求首先了解熟悉任务计划书(https://bbs.huaweicloud.com/blogs/439896),目的需求是将 InternLM2.5 项目适配至华为的 Ascend(昇腾)和 Kunpeng(鲲鹏)处理器,确保模型能在这些硬件平台上的高效运行,需要注意系统架构是aarch64。二、过程本文验证的模型是InternLM2.5-1.8B-chat,可根据需求替换不同参数的...

一、任务需求

首先了解熟悉任务计划书(https://bbs.huaweicloud.com/blogs/439896),目的需求是将 InternLM2.5 项目适配至华为的 Ascend(昇腾)和 Kunpeng(鲲鹏)处理器,确保模型能在这些硬件平台上的高效运行,需要注意系统架构是aarch64。

二、过程

本文验证的模型是InternLM2.5-1.8B-chat,可根据需求替换不同参数的模型

明确需求后开始熟悉模型,了解其需要的配置和环境要求

安装相关依赖:python版本为3.10
#使用yum更新下环境包
yum update -y
#更新pip
python -m pip install --upgrade pip
#安装torch
pip install torch==2.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装numpy要2以下
pip install numpy==1.26.4
pip install packaging streamlit einops sentencepiece -i https://pypi.tuna.tsinghua.edu.cn/simple
#conda install -c conda-forge transformers==4.4.0
pip install transformers==4.40.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

下载模型
#安装ModelScope
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
#下载internlm2_5-1_8b-chat模型到当前文件夹
modelscope download --model Shanghai_AI_Laboratory/internlm2_5-1_8b-chat --local_dir ./dir

下载代码
InternLM2.5的github地址:https://github.com/InternLM/InternLM,将其代码库中的代码文件下载下来(chat/web_demo.py)
需要将load_model函数下的地址修改为本地模型地址

代码修改适配,详情见代码仓库:https://gitcode.com/2401_82798006/InternLM/overview
web_demo_cpu_html:源码提供了html前端展示页面的代码部分,CSS样式可能在本地运行有冲突,修改了其中部分
web_demo_cpu_terminal:代码去除前端交互部分,可在终端交互
web_demo_npu_terminal:昇腾堡垒机不支持前端交互,在终端交互代码,指定npu加速模块

可根据调整相关参数来改变回答结果,主要参数如下:
#在生成文本模型的配置中,max_lengthtop_ptemperature 是常用的参数,用于控制生成文本的行为和质量。以下是对这三个参数的解释:
1. max_length:
含义: 生成文本的最大长度。
作用: 限制生成的文本序列的最大长度,以防止生成过长的文本。
使用场景: 当你希望生成的文本在一定长度内时,可以设置这个参数。
2. top_p (也称为 nucleus sampling):
含义: 控制生成文本的多样性。
作用: 通过选择概率总和达到 top_p 的词汇来限制候选词汇的集合。top_p=0.9 意味着只考虑概率总和达到 90% 的词汇。
使用场景: 当你希望生成的文本更加多样化时,可以调高 top_p;如果希望生成的文本更加确定,可以调低 top_p。
3. temperature:
含义: 控制生成文本的随机性。
作用: 通过缩放 logits 来影响生成的随机性。较高的温度(如 1.0)会使生成的文本更加随机,而较低的温度(如 0.1)会使生成的文本更加确定。
使用场景: 当你希望生成的文本更加有创意时,可以调高 temperature;如果希望生成的文本更加保守,可以调低 temperature。
这三个参数可以结合使用,以调整生成文本的风格和质量,具体的设置取决于你的应用场景和需求。

------------------------------------------------------------------------------------------------------------------

昇腾NPU和鲲鹏CPU部署整体过程类似,需要多安装一个touch_npu,版本也选择2.2,NPU需要将cpu核心换成npu,运行时可能会提醒缺少相关依赖,根据提示安装即可
pip install decorator scipy cloudpickle ml-dtypes psutil

需要更新昇腾环境
     export ASCEND_GLOBAL_LOG_LEVEL=3
     export ASCEND_SLOG_PRINT_TO_STDOUT=1
     export ASCEND_GLOBAL_EVENT_ENABLE=0
     export ASCEND_GLOBAL_LOG_FILE_NUM=10
     export ASCEND_GLOBAL_LOG_FILE_SIZE=1024
     export ASCEND_GLOBAL_LOG_PATH=/var/log/npu
     export ASCEND_AICPU_PATH=/usr/local/Ascend/ascend-toolkit/latest
     export ASCEND_OPP_PATH=/usr/local/Ascend/ascend-toolkit/latest/opp
     export PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:$PYTHONPATH
     export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/lib64:$LD_LIBRARY_PATH

三、结果

使用InternLM进行对话问答

CPU

internlm_cpu_html.png

internlm_cpu_terminal.png

NPU

intern_npu_terminal_结果.png

NPU运行状态

NPU.png

四、心得及其注意事项

  • 系统是arrch64架构,不同于常见的x86,很多配置没有相应版本需要重新编译。
  • numpy版本要小于2,本文提供的版本是numpy==1.26.4
  • transformer官方版本是要大于4.38即可,最新版的易冲突报错,需要降级,但过程中测试transformers==4.40不行,需要多下载Rust重新编译且容易报错,建议用transformers==4.40.2
  • 易忽略的点是推理代码中写的模型路径要用相对路径,绝对路径会报错找不到相对应的模块
  • 国外模型网站不是经常能访问到,有需要可设置国内镜像源。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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