今天收到一个大模型进行国产化适配的任务,服务器是华为鲲鹏服务器(300I-pro),由于之前没有接触过该服务器,为了进行适配,就开始了摸索之路。

一、环境搭建框架

通过调研发现,进行适配环境的搭建,总共有两种方法,一种就是物理机搭建,另一种是通过docker镜像部署。这两者需要安装的环境是有些差别的。下面用图进行展示它们之间存在的差别:

1、物理机部署

物理机部署的环境如下图所示:

物理机依赖架构

2、容器部署

容器部署的环境如下图所示:

容器依赖结构

二、环境准备

为了操作的灵活性,因此我开始选择了物理机进行环境搭建,这种方式比基于docker容器搭建费劲一些,因为好多底层环境需要自己一步一步进行搭建。

1、安转驱动与固件

# 下载驱动与固件
Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run
Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run

# 增加可执行权限
chmod +x Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run
chmod +x Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run

# 校验run安装包的一致性和完整性
./Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run --check
./Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run  --check

# 安装驱动
./Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run --full
./Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run  --full

# 重启服务器(生效)
reboot

# 卸载驱动与固件
./Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run --uninstall
./Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run  --uninstall

2、安转CANN软件包

# 下载CANN包
Ascend-cann-toolkit_8.0.RC2_linux-aarch64.run

# 增加可执行权限
chmod +x Ascend-cann-toolkit_8.0.RC2_linux-aarch64.run

# 校验run安装包的一致性和完整性
./Ascend-cann-toolkit_8.0.RC2_linux-aarch64.run --check

# 安装软件包
./Ascend-cann-toolkit_8.0.RC2_linux-aarch64.run --check --install

# 配置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh 

# 安装后检查
cd /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux
cat ascend_toolkit_install.info

check

install successfully

version info

3、安转Kernels算子包

Kernels算子包能够节省算子编译时间,在如下场景中需要安装:

(1)大模型推理、训练场景
(2)运行包含动态shape网络或单算子API相关业务场景

在安装Kernels算子包之前,需要安装配套版本的Toolkit并配置环境变量。

# 下载Kernels算子包
Ascend-cann-kernels-310p_8.0.RC2_linux.run

# 增加可执行权限
chmod +x Ascend-cann-kernels-310p_8.0.RC2_linux.run

# 校验run安装包的一致和完整性
./Ascend-cann-kernels-310p_8.0.RC2_linux.run --check

# 安装软件包
./Ascend-cann-kernels-310p_8.0.RC2_linux.run --install

# 安装后检查
cd /usr/local/Ascend/ascend-toolkit/latest/opp_kernel
cat version.info

check

install success

version info

4、安装NNAL加速库

NNAL加速库软件包中提供了面向大模型领域的ATB(Ascend Transformer Boost)加速库,实现了基于Transformers结构的神经网络推理加速引擎库,提供昇腾亲和的融合算子、通信算子、内存优化等,作为算子的公共底座提升了大模型训练和推理性能。
在安装NNAL加速库之前,需要安装配套版本的Toolkit并配置环境变量。

# 下载NNAL加速库
Ascend-cann-nnal_8.0.RC2_linux-aarch64.run

# 增加可执行权限
chmod +x Ascend-cann-nnal_8.0.RC2_linux-aarch64.run

# 校验run安装包的一致性和完整性
./Ascend-cann-nnal_8.0.RC2_linux-aarch64.run  --check

# 安装软件包
./Ascend-cann-nnal_8.0.RC2_linux-aarch64.run  --install

# 配置环境变量(当前进程)
source /usr/local/Ascend/nnal/atb/set_env.sh

# 配置环境变量(所有进程)
vim ~/.bashrc
source /usr/local/Ascend/nnal/atb/set_env.sh
source ~/.bashrc

# 安装后检查
cd /usr/local/Ascend/nnal/atb/latest
cat version.info

check

install success

version info

5、安装PyTorch库

安装了配套版本的NPU驱动固件、CANN软件(Toolkit、Kernels、NNAL)并配置环境变量。

# 下载安装包
# 下载PyTorch安装包
wget https://download.pytorch.org/whl/cpu/torch-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 下载torch_npu插件包
wget https://gitee.com/ascend/pytorch/releases/download/v6.0.rc2-pytorch2.2.0/torch_npu-2.2.0.post2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

# 执行命令安装
pip3 install torchvision==0.17.0
pip3 install torch-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip3 install torch_npu-2.2.0.post2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

# 验证安装是否成功
python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"

# 卸载软件
pip3 uninstall torch torch_npu

6、安装ATB Models库

拉取Mindie镜像

MindIe 镜像

根据拉取的镜像,创建一个容器,比如 创建的容器名字叫:llm-demo

# 创建容器
docker run -it -d --net=host --ipc=host \
    --shm-size=15g \
    --name llm-demo \
    --privileged=true \
    --device=/dev/davinci_manager \
    --device=/dev/hisi_hdc \
    --device=/dev/devmm_svm \
    -w /home \
    --device=/dev/davinci0 \
    -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
    -v /usr/local/dcmi:/usr/local/dcmi \
    -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
    -v /usr/local/sbin:/usr/local/sbin \
    -v /home:/home \
    -v /tmp:/tmp \
    -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
    swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.RC2-300I--Duo-arm64 /bin/bash

# 进入容器
docker exec -it llm-demo /bin/bash

# 安装atb-llm的python包
pip3 install atb_llm-0.0.1-py3-none-any.whl

# 配置环境变量(当前进程)
source /usr/local/atb_models/set_env.sh

7、安装MindIE库

MindIE(Mind Inference Engine,昇腾推理引擎)是华为昇腾针对AI全场景业务的推理加速套件,具有强大的性能,健全的生态,帮助用户快速开展业务迁移、业务定制。

# 准备mindie安装库
Ascend-mindie_1.0.RC2_linux-aarch64.run

# 增加可执行权限
chmod +x Ascend-mindie_1.0.RC2_linux-aarch64.run

# 校验run安装包的一致和完整性
./Ascend-mindie_1.0.RC2_linux-aarch64.run --check

# 安装软件包
./Ascend-mindie_1.0.RC2_linux-aarch64.run --install --quiet

配置环境变量(当前进程)
source /usr/local/Ascend/mindie/set_env.sh

配置MindIE Server
# 进入mindie安装目录
cd /usr/local/Ascend/mindie
chmod 750 mindie-service
chmod -R 550 mindie-service/bin
chmod -R 500 mindie-service/bin/mindieservice_backend_connector
chmod -R 550 mindie-service/lib
chmod -R 550 mindie-service/include/
chmod -R 550 mindie-service/scripts/
chmod 750 mindie-service/logs
chmod 750 mindie-service/conf
chmod 640 mindie-service/conf/config.json
chmod 700 mindie-service/security/
chmod -R 700 mindie-service/security/*

根据用户需要设置配置参数
进入config目录,打开config.json文件
cd mindie-service/conf
vim config.json

配置参数介绍(主要)
资源参数:ResourceParam
    cacheBlockSize:kvcache block的size大小,建议取值128,其他值建议取为2的n次幂。
    preAllocBlocks:预分配策略,给请求分配好block数量
日志参数:LogParam
    logLevel:日志级别
    logPath:日志保存路径
模型部署参数:ModelDeployParam
    modelName:模型名字
    maxSeqLen:最大序列长度,输入的长度+输出的长度<=maxSeqLen
    npuMemSize:NPU中可以用来申请kv cache的size上限。单位:GB,建议值:8。快速计算公式:npuMemSize=(总空闲-权重/NPU卡数-后处理占用)*系数,其中系数取0.8。
    cpuMemSize:

上述就是在物理机上进行搭建大模型运行的环境的完整步骤

转自:https://zhuanlan.zhihu.com/p/14171101448

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐