前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >昇腾910B测试指导文档

昇腾910B测试指导文档

原创
作者头像
Yellowsun
修改2024-10-22 21:02:32
1390
修改2024-10-22 21:02:32

版本

改动

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版本

1. 购机选择正确的OS共享镜像

从「共享镜像」标签中,选择"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地址。

2. 系统检查

2.1 NPU卡状态检查

代码语言:txt
复制
npu-smi info
# 在每个实例节点上运行上述命令可以看到NPU卡状态

npu-smi info -l | grep Total
# 在每个实例节点上运行上述命令可以看到16张卡

2.2 网络状态检查

代码语言:txt
复制
bash /usr/local/qcloud/rdma/ascend_rdma_check.sh
# 如果输出有异常就需要检查机器的状态了。
# 建议在每个实例节点上运行上述命令,检查所有机器NPU的硬件状态。

3. 性能测试

测试结果请参考第4节。

3.1 挂载本地NVME盘,存储容器运行环境(可选)

如果系统盘较小,比如50GB以下,建议将容器镜像的默认保存路径修改到本地NVME盘(所有训练节点都需要更新)。

代码语言:txt
复制
# 挂载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

3.2 RDMA测试(主机上)

代码语言:txt
复制
#可在任意两个节点之间进行如下测试。
#查询设备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端命令,再次发起测试可能遇到如下错误:

代码语言:txt
复制
Dsmi get perftest status end. (status=2)
Roce perftest is doing, please try later.
Cmd execute failed!

需要先reset一下设备:

代码语言:txt
复制
hccn_tool -i 0 -roce_test reset

3.3 启动测试容器

代码语言:txt
复制
# 需要在所有节点上启动如下容器:
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.4 机器列表排序(容器内)

● 进入任意一台机器上容器的如下目录(保证所有机器都启动了3.3节的容器镜像)

代码语言:txt
复制
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 中,例如:

代码语言:txt
复制
cat > ip_eth0.txt << EOF
10.0.0.1
10.0.0.10
10.0.0.8
10.0.0.9
EOF

● 排序(基于网络拓扑),

代码语言:txt
复制
bash get_rdma_order_by_ip.sh -f ip_eth0.txt

排序后的列表默认保存在当前目录的hostfile.txt

代码语言: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>,例如:

代码语言:txt
复制
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 训练加速引擎-文档中心-腾讯云

3.5 集合通信测试 (容器内,只在master节点行执行)

代码语言:txt
复制
// 运行2机32卡4G数据包的AllReduce
bash run_hccl_test.sh 0 4G 32
// 运行2机32卡4G数据包的All2All
bash run_hccl_test.sh 1 4G 32

3.6 LLaMA2预训练

单机16卡测试

代码语言:txt
复制
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

多机测试

代码语言:txt
复制
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

如果机器数量较多,可以使用如下脚本在一台机器启动多机训练

代码语言:txt
复制
cd /workspace/AscendSpeed

# 修改multi_nodes_start.sh脚本,添加训练节点的IP列表

# 启动多机训练
bash multi_nodes_start.sh

3.7 chatGLM2-6B微调

参考:https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/foundation/ChatGLM2-6B

代码语言:txt
复制
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。

3.8 Baichuan2-13B微调

参考:https://gitee.com/ascend/ModelLink/tree/master/examples/baichuan2#%E8%AF%84%E4%BC%B0

代码语言:txt
复制
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

3.9 SDXL微调

参考:

https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/diffusion/diffusers0.21.0

代码语言:txt
复制
cd /workspace/diffusers0.21.0

# 下载模型和权重
bash download_dataset_model.sh

# 启动SDXL Lora微调
bash start_sdxl.sh

3.10 其他模型

目前昇腾官方支持的模型包括:

https://gitee.com/ascend/ModelLink/tree/master/examples

https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in

针对官方尚未支持的模型,建议提交新模型需求给腾讯云售后,推进提供性能更优的版本实现。

4. 性能结果

4.1 RDMA性能

带宽测试结果:

带宽测试数据维持上述结果左右就是ok的。

延时测试结果:

延时测试数据维持上述结果左右就是ok的。

4.2 集合通信性能

8卡到64卡AllReduce测试数据如下图。

注:hccl计算出来为算法带宽,这里以nvidia的带宽计算方式转化为bus带宽作为对比(以算法带宽为准),总线带宽计算方法如下:

备注:rank是NPU卡数。

注:hccl计算出来为算法带宽,这里以nvidia的带宽计算方式转化为bus带宽作为对比展示(以算法带宽为准),总线带宽计算方法如下:

备注:rank是NPU卡数。

4.2 AI模型训练性能

5. 推理测评

本节主要在HCCPH1的机型上使用华为官方MindIE推理框架进行推理的部署及测评说明。

可参考官方文档:https://www.hiascend.com/document/detail//zh/mindie/10RC1/description/download

5.1. 启动容器

代码语言:txt
复制
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

5.2. 离线推理

代码语言:txt
复制
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

5.2. client/serving推理

Ascend基于Serving的形式,提供了一个client/serving方案的部署文档:MindIE-Service开发指南.pdf

5.2.1. 启动server端

代码语言:txt
复制
# 进入到 Mind-IE server 路径
cd /usr/local/Ascend/mindie/latest/mindie-service

# 修改配置
vim conf/config.json

对config.json进行如下修改(示例,请根据实际情况修改):

代码语言:txt
复制
{
    "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:

代码语言:txt
复制
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 已启动。

5.2.2. 启动client端

在同一容器内,保留 server 进程窗口,另开窗口进行请求的发送:

代码语言:txt
复制
# 请求目前可用模型
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 购机选择正确的OS共享镜像
  • 2. 系统检查
    • 2.1 NPU卡状态检查
      • 2.2 网络状态检查
      • 3. 性能测试
        • 3.1 挂载本地NVME盘,存储容器运行环境(可选)
          • 3.2 RDMA测试(主机上)
            • 3.3 启动测试容器
              • 3.4 机器列表排序(容器内)
                • 3.5 集合通信测试 (容器内,只在master节点行执行)
                  • 3.6 LLaMA2预训练
                    • 3.7 chatGLM2-6B微调
                      • 3.8 Baichuan2-13B微调
                        • 3.9 SDXL微调
                          • 3.10 其他模型
                          • 4. 性能结果
                            • 4.1 RDMA性能
                              • 4.2 集合通信性能
                                • 4.2 AI模型训练性能
                                • 5. 推理测评
                                  • 5.1. 启动容器
                                    • 5.2. 离线推理
                                      • 5.2. client/serving推理
                                        • 5.2.1. 启动server端
                                        • 5.2.2. 启动client端
                                    相关产品与服务
                                    高性能计算集群
                                    高性能计算集群(Tencent Hyper Computing Cluster)以高性能云服务器为节点,通过 RDMA 互联,大幅提升网络性能,提供高带宽和极低延迟的网络服务。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档