版本 | 改动 |
---|---|
V1 - 1/8/2024 | 产品化版本 |
V2-1/12/2024 | 昇腾1230商发版本升级(包括固件、驱动、OS镜像、容器镜像等) |
V3-1/15/2024 | 容器镜像升级到v0.4.3,更新1230版本性能数据 |
V4-1/23/2024 | 容器镜像升级到v0.4.4,支持Baichuan2、ChatGLM2、InternLMtf |
V5-1/30/2024 | 删除自定义镜像部分,建议用户直接使用腾讯云提供的容器镜像 |
V6-2/18/2024 | 更新容器镜像版本到v0.4.5,支持SD和部分CV模型 |
V7-2/26/2024 | 更新镜像里的NPU驱动到V23.0.2.1版本。 |
V8-03/05/2024 | 更新镜像里的NPU驱动V23.0.2.1的签名版本。 |
V9-03/12/2024 | 新增MindIE推理服务验证, update镜像等 |
V10-05/11/2024 | 更新推理服务镜像,支持MindIE 1.0.RC1版本 |
V11-05/27/2024 | 更新OS镜像和训练容器镜像,支持CANN 8.0.RC1版本 |
从「共享镜像」标签中,选择"img-604dshjd",镜像说明:Ascend-NPU-15.0-tlinux3.1。
如果找不到对应的镜像,需要提供账号信息并通知售后团队发起镜像共享。
该OS镜像预装了如下软件:
● 操作系统:TencentOS Server 3.1 (TK4,与Centos 8同源,使用yum安装软件包)
● 内核版本:5.4.119-19.0009.28(优化版内核)
● NPU驱动版本:23.0.2.1
● CANN版本:8.0.RC1
● Docker版本: 24.0.6, build ed223bc
如果使用自定义OS镜像,需要自行安装NPU驱动和CANN toolkits。
如果是ubuntu:
ubuntu 20.04(Ascend-NPU-10.0-ubuntu20-04):
img-pq55bu6f
ubuntu 22.04(Ascend-NPU-8.0-ubuntu22-04):
img-3cnyak8d
如果找不到对应的镜像,需要提供账号信息并通知售后团队发起镜像共享。
其他说明:
1)一台CVM实例就是一个单机场景,多台实例测试就是多机测试场景了。
2)一台实例一共16个NPU(rdma和NPU是集成在一起的)设备,单机16卡,控制台你会看到除了内网vpc地址以及公网IP外,还会展示16个rdma IP地址。
npu-smi info
# 在每个实例节点上运行上述命令可以看到NPU卡状态
npu-smi info -l | grep Total
# 在每个实例节点上运行上述命令可以看到16张卡
bash /usr/local/qcloud/rdma/ascend_rdma_check.sh
# 如果输出有异常就需要检查机器的状态了。
# 建议在每个实例节点上运行上述命令,检查所有机器NPU的硬件状态。
测试结果请参考第4节。
如果系统盘较小,比如50GB以下,建议将容器镜像的默认保存路径修改到本地NVME盘(所有训练节点都需要更新)。
# 挂载nvme0n1
printf "n\np\n1\n\n\nw\n" | fdisk /dev/nvme0n1
sleep 1
mkfs.ext4 /dev/nvme0n1p1
mkdir -p /data0 && mount /dev/nvme0n1p1 /data0
df -h
# (可选)修改fstab,添加系统重启之后自动挂载操作
# 修改docker默认保存路径
mv /var/lib/docker /data0/ && ln -sf /data0/docker /var/lib/docker
systemctl restart docker
#可在任意两个节点之间进行如下测试。
#查询设备eth0的ip地址,id范围是 0 ~ 15:
hccn_tool -i 0 -ip -g
#测试带宽:
#在A节点上启动server:
hccn_tool -i 0 -roce_test ib_send_bw -s 65536 -n 20000 -tcp
#在B节点上启动client,client需要指定目的ip:
hccn_tool -i 0 -roce_test ib_send_bw -s 65536 -n 20000 address <dest ip> -tcp
#测试延时:
#在A节点上启动server:
hccn_tool -i 0 -roce_test ib_send_lat -s 2 -n 20000 -tcp
#在B节点上启动client,client需要指定目的ip:
hccn_tool -i 0 -roce_test ib_send_lat -s 2 -n 20000 address <dest ip> -tcp
如果测试完成后,比如:ctr+c掉了server端命令,再次发起测试可能遇到如下错误:
Dsmi get perftest status end. (status=2)
Roce perftest is doing, please try later.
Cmd execute failed!
需要先reset一下设备:
hccn_tool -i 0 -roce_test reset
# 需要在所有节点上启动如下容器:
docker run -itd \
--net=host \
--ipc=host \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci8 \
--device=/dev/davinci9 \
--device=/dev/davinci10 \
--device=/dev/davinci11 \
--device=/dev/davinci12 \
--device=/dev/davinci13 \
--device=/dev/davinci14 \
--device=/dev/davinci15 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
-v /data0:/data \
--name=ai haihub.cn/tencent/taco-train/23.0.rc3-2.1.0-ubuntu18.04-v0.4.8:latest /bin/bash
该容器进行包含了如下版本:
● Ubuntu 18.04 LTS
● CANN toolkits:8.0.RC1
conda env <torch21_python38>
● python:3.8.0
● torch:2.1.0+cpu
● torch-npu: 2.1.0.post3
● deepspeed: 0.14.0
● transformers: 4.33.0
● apex:0.1-ascend
● 进入任意一台机器上容器的如下目录(保证所有机器都启动了3.3节的容器镜像)
1)首先通过ssh(你可以用公网IP进行ssh或者在一台实例内部通过内网IP用ssh连接其他实例)或者控制台登陆vnc等方式进到你的实例里边;
2)其次,执行如下命令进入docker:
docker ps通过这个命令找到你的容器,比如本文示例ai
然后用如下命令进到容器里边,比如本文的示例ai容器:
docker exec -it ai bash
3)进到如下目录:
cd /workspace/tools/
● 将要参与集合通信测试机器的ENI ip(通过ifconfig eth0获取)存放到ip_eth0.txt 中,例如:
cat > ip_eth0.txt << EOF
10.0.0.1
10.0.0.10
10.0.0.8
10.0.0.9
EOF
● 排序(基于网络拓扑),
bash get_rdma_order_by_ip.sh -f ip_eth0.txt
排序后的列表默认保存在当前目录的hostfile.txt中
10.0.0.10
10.0.0.8
10.0.0.9
10.0.0.1
● 上述清单中的第一个ip(10.0.0.10)将作为master节点,进入master机器的容器
● 将排序后的ip list写入到/workspace/run_hccl_tests.sh变量<ip_list>,例如:
declare -a ip_list=(
10.0.0.10
10.0.0.8
10.0.0.9
10.0.0.1
)
即给run_hccl_test.sh脚本加入上述内容,相当于替换掉默认的ip_list变量。
注意:为什么需要排序列表?
参考:计算加速套件 TACO Kit TCCL 使用说明-TACO Train AI 训练加速引擎-文档中心-腾讯云
// 运行2机32卡4G数据包的AllReduce
bash run_hccl_test.sh 0 4G 32
// 运行2机32卡4G数据包的All2All
bash run_hccl_test.sh 1 4G 32
单机16卡测试
cd /workspace/AscendSpeed
# llama2-7B模型
bash examples/llama2/pretrain_llama2_7b_ptd.sh
# llama2-13B模型
bash examples/llama2/pretrain_llama2_13B_ptd_8p.sh
# llama2-34B模型
bash examples/llama2/pretrain_llama2_34B_ptd.sh
# llama2-70B模型
bash examples/llama2/pretrain_llama2_70B_ptd.sh
多机测试
cd /workspace/AscendSpeed
# 以2机32卡llama2-7B模型为例
bash examples/llama2/pretrain_llama2_7b_ptd.sh <master_ip> <num_nodes> <node_rank>
# master机器:172.17.177.21
# 机器1
bash examples/llama2/pretrain_llama2_7b_ptd.sh 172.17.177.21 2 0
# 机器2
bash examples/llama2/pretrain_llama2_7b_ptd.sh 172.17.177.21 2 1
如果机器数量较多,可以使用如下脚本在一台机器启动多机训练
cd /workspace/AscendSpeed
# 修改multi_nodes_start.sh脚本,添加训练节点的IP列表
# 启动多机训练
bash multi_nodes_start.sh
参考:https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/foundation/ChatGLM2-6B
cd /workspace/ChatGLM2-6B/ptuning
# 下载预训练模型
bash download_model.sh
# 数据集预处理
bash preprocess.sh
# 替换模型实现代码
cp ../model/modeling_chatglm.py /data/models/chatglm2-6b/modeling_chatglm.py
# 启动全量微调
bash start.sh
# 模型推理
python infer.py
# 输入:类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞
# 输出(微调前):上衣材质:牛仔布 颜色:白色 风格:简约 图案:刺绣 衣样式:外套 衣款式:破洞
# 输出(ft):这款牛仔外套的衣身上点缀着精致的白色刺绣图案,显得个性十足,破洞的设计,展现出不羁的时尚态度。而简约的版型,穿在身上显得十分帅气,而且十分百搭。
# 微调结果评估
bash evaluate_finetune.sh
如果遇到错误:
RuntimeError: call aclnnFlashAttentionScore failed,
修改modeling_chatglm.py文件: USE_FLASH=False。
参考:https://gitee.com/ascend/ModelLink/tree/master/examples/baichuan2#%E8%AF%84%E4%BC%B0
cd /workspace/AscendSpeed/
# 下载模型权重
bash examples/baichuan2/download_13B_model.sh
# 转换成AscendSpeed格式
bash examples/baichuan2/convert_to_ascendspeed_format.sh
# 下载数据集并预处理
bash examples/baichuan2/download_data_preprocess.sh
# 启动微调
bash examples/baichuan2/pretrain_baichuan2_ptd_13B.sh
# 验证模型推理
bash examples/baichuan2/generate_baichuan2_13B_tp8_pp1.sh
# 模型精度评估
bash examples/baichuan2/eval_baichuan2_13B_tp8_pp1.sh
参考:
https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/diffusion/diffusers0.21.0
cd /workspace/diffusers0.21.0
# 下载模型和权重
bash download_dataset_model.sh
# 启动SDXL Lora微调
bash start_sdxl.sh
目前昇腾官方支持的模型包括:
https://gitee.com/ascend/ModelLink/tree/master/examples
https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in
针对官方尚未支持的模型,建议提交新模型需求给腾讯云售后,推进提供性能更优的版本实现。
带宽测试结果:
带宽测试数据维持上述结果左右就是ok的。
延时测试结果:
延时测试数据维持上述结果左右就是ok的。
8卡到64卡AllReduce测试数据如下图。
注:hccl计算出来为算法带宽,这里以nvidia的带宽计算方式转化为bus带宽作为对比(以算法带宽为准),总线带宽计算方法如下:
备注:rank是NPU卡数。
注:hccl计算出来为算法带宽,这里以nvidia的带宽计算方式转化为bus带宽作为对比展示(以算法带宽为准),总线带宽计算方法如下:
备注:rank是NPU卡数。
本节主要在HCCPH1的机型上使用华为官方MindIE推理框架进行推理的部署及测评说明。
可参考官方文档:https://www.hiascend.com/document/detail//zh/mindie/10RC1/description/download
docker run -itd \
--net=host \
--ipc=host \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci8 \
--device=/dev/davinci9 \
--device=/dev/davinci10 \
--device=/dev/davinci11 \
--device=/dev/davinci12 \
--device=/dev/davinci13 \
--device=/dev/davinci14 \
--device=/dev/davinci15 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
-v /data0:/data \
--workdir=/workspace \
--name=infer haihub.cn/tencent/taco-infer/tx_mindie_infer_1.0.rc1:latest
该容器进行包含了如下版本:
● Ubuntu 22.04.4 LTS
● CANN toolkits:8.0.RC1 (330商发版本)
● python:3.10
● torch:2.1.0+cpu
● torch-npu: 2.1.0.post3
● transformers: 4.40.2
● mindieclient: 1.0rc1
● mindietorch: 1.0rc1+torch2.1.0.abi0
cd /workspace/atb_models/tests/modeltest
# llama2-7B 性能测评
bash run.sh pa_fp16 performance [[128,128]] 1 llama False /data/models/Llama-2-7b-chat-hf/ 1
# 参数说明
# [[128, 128]]:input_len, output_len
# 1:在这里表示batch size数
# llama:模型名称,目前可支持的模型可参考工程中的readme.md
# /data/models/Llama-2-7b-chat-hf/:表示模型原文件包括权重存放位置。
# 1:表示使用的NPU数量。
# llama2-7B 精度测评
bash run.sh pa_fp16 full_CEval 1 llama False /data/models/Llama-2-7b-chat-hf/ 1
● 测试脚本使用说明请参考:ModelLink: 昇腾大模型仓库 - Gitee.com
Ascend基于Serving的形式,提供了一个client/serving方案的部署文档:MindIE-Service开发指南.pdf
# 进入到 Mind-IE server 路径
cd /usr/local/Ascend/mindie/latest/mindie-service
# 修改配置
vim conf/config.json
对config.json进行如下修改(示例,请根据实际情况修改):
{
"OtherParam":
{
"ResourceParam" :
{
"cacheBlockSize" : 128,
"preAllocBlocks" : 4
},
"LogParam" :
{
"logLevel" : "Info",
"logPath" : "/logs/mindservice.log"
},
"ServeParam" :
{
"ipAddress" : "127.0.0.1",
"port" : 1025,
"maxLinkNum" : 300,
"httpsEnabled" : false, #是否开启 HTTPS
"tlsCaPath" : "security/ca/",
"tlsCaFile" : ["ca.pem"],
"tlsCert" : "security/certs/server.pem",
"tlsPk" : "security/keys/server.key.pem",
"tlsPkPwd" : "security/pass/mindie_server_key_pwd.txt",
"kmcKsfMaster" : "tools/pmt/master/ksfa",
"kmcKsfStandby" : "tools/pmt/standby/ksfb",
"tlsCrl" : "security/certs/server_crl.pem"
}
},
"WorkFlowParam":
{
"TemplateParam" :
{
"templateType": "Standard",
"templateName" : "Standard_llama",
"pipelineNumber" : 1
}
},
"ModelDeployParam":
{
"maxSeqLen" : 2560,
"npuDeviceIds" : [[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]],#启用 npu 的 IDs
"ModelParam" : [
{
"modelInstanceType": "Standard",
"modelName" : "llama_65b",# 模型名称
"modelWeightPath" : "/data/atb_testdata/weights/llama1-65b-safetensors",# 模型权重路径
"worldSize" : 16, #npu 数
"cpuMemSize" : 5,
"npuMemSize" : 8,
"backendType": "atb"
}
]
},
"ScheduleParam":
{
"maxPrefillBatchSize" : 50,
"maxPrefillTokens" : 8192,
"prefillTimeMsPerReq" : 150,
"prefillPolicyType" : 0,
"decodeTimeMsPerReq" : 50,
"decodePolicyType" : 0,
"maxBatchSize" : 200,
"maxIterTimes" : 512,
"maxPreemptCount" : 200,
"supportSelectBatch" : false,
"maxQueueDelayMicroseconds" : 5000
}
}
具体配置及性能调优可参考:昇腾社区-官网丨昇腾万里 让智能无所不及
配置完毕后,启动 server:
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
./bin/mindieservice_daemon
显示Daemon start success! 即表明 server 已启动。
在同一容器内,保留 server 进程窗口,另开窗口进行请求的发送:
# 请求目前可用模型
curl 127.0.0.1:1025/v1/models
# 对话请求样例
curl --location '127.0.0.1:1025/v1/chat/completions' \
--data '{
"model": "llama2_7b",
"messages": [{
"role": "user",
"content": "who are you?"
}],
"presence_penalty": 1.03,
"frequency_penalty": 1.0,
"seed": null,
"temperature": 0.5,
"top_p": 0.95,
"stream": false
}'
对话结果如下,结果可在response.choices0.message.content中看到:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。