加载镜像
前往昇腾社区/开发资源下载适配,下载镜像前需要申请权限,耐心等待权限申请通过后,根据指南下载对应镜像文件。
完成之后,请使用docker images命令确认查找具体镜像名称与标签。
特性矩阵
- 此矩阵罗列了Qwen2.5模型支持的特性
模型及参数量 | 800I A2 Tensor Parallelism | 300I DUO Tensor Parallelism | FP16 | BF16 | Flash Attention | Paged Attention | W8A8量化 | W8A16量化 | KV cache量化 | 稀疏量化 | MOE量化 | MindIE Service | TGI | 长序列 | prefix_cache | FA3量化 | functioncall | Multi LoRA |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Qwen2.5-72B | 支持world size 8 | x | √ | √ | x | √ | √ | x | √ | × | × | √ | × | √ | √ | √ | √ | x |
s | ||||||||||||||||||
注:表中所示支持的world size为对话测试可跑通的配置,实际运行时还需考虑输入序列长度带来的显存占用。 |
- 部署Qwen2.5-72B-Instruct模型至少需要1台Atlas 800I A2服务器
路径变量解释
变量名 | 含义 |
---|---|
working_dir | 加速库及模型库下载后放置的目录 |
llm_path | 模型仓所在路径。若使用编译好的包,则路径为/usr/local/Ascend/atb-models ;若使用 gitee 下载的代码,则路径为${working_dir}/MindIE-LLM/examples/atb_models |
script_path | 脚本所在路径;qwen2.5 的工作脚本所在路径为${llm_path}/examples/models/qwen |
weight_path | 模型权重路径 |
rank_table_path | Rank table文件路径 |
权重
权重下载
版本配套
模型版本 | transformers版本 |
---|---|
Qwen2.5 | 4.43.1 |
生成量化权重
Qwen2.5-72B FA3量化
- 参考量化工具中的FA3量化的README文档进行F3A量化 量化工具文档:https://gitee.com/ascend/msit/tree/master/msmodelslim; FA3量化指导:https://gitee.com/ascend/msit/blob/master/msmodelslim/docs/FA%E9%87%8F%E5%8C%96%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.md
- 生成权重后,需要将模型浮点权重中的其他文件(除safetensors文件外)手工拷贝到目标量化文件夹中。
- 拷贝好之后,用户需在
config.json
文件中手动添加以下两个字段:"quantize": "w8a8", "quantization_config": {"fa_quant_type": "FAQuant"}
纯模型推理:
【使用场景】使用相同输入长度和相同输出长度,构造多Batch去测试纯模型性能
对话测试的run_pa.sh 参数说明(需要到脚本中修改)
根据硬件设备不同请参考下表修改run_pa.sh再运行
参数名称 | 含义 | 800I A2推荐值 |
---|---|---|
BIND_CPU | 绑定CPU核心开关,默认进行绑核 | 1 |
ASCEND_RT_VISIBLE_DEVICES | 使用的硬件卡号,多个卡间使用逗号相连 | 根据实际情况设置 |
RESERVED_MEMORY_GB | 保留内存,通常未加速库需要的内存+通信内存 | 3 |
MASTER_PORT | 卡间通信端口,通常不用修改,有冲突时再改 |
注:暂不支持奇数卡并行 ```
- 环境变量释义
1.
export HCCL_DETERMINISTIC=false
export LCCL_DETERMINISTIC=0
这两个会影响性能,开启了变慢,但是会变成确定性计算,不开会变快,所以设置为0。 2.
export HCCL_BUFFSIZE=120
这个会影响hccl显存,需要设置,基本不影响性能。 3.
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
这个是显存优化,需要开,小batch、短序列场景不开更好。
对话测试
- 进入atb-models路径
cd /usr/local/Ascend/atb-models
Step1.清理残余进程:
pkill -9 -f 'mindie|python'
Step2.执行命令:
bash examples/models/qwen/run_pa.sh -m ${weight_path} --trust_remote_code true
精度测试
- 进入modeltest路径
cd /usr/local/Ascend/atb-models/tests/modeltest/
- 运行测试脚本
Step1.清理残余进程:
pkill -9 -f 'mindie|python'
Step2.执行命令:
bash run.sh pa_[data_type] [dataset] ([shots]) [batch_size] [model_name] ([is_chat_model]) [weight_dir] [world_size]
参数说明:
data_type
:为数据类型,根据权重目录下config.json的data_type选择bf16或者fp16,例如:pa_bf16。dataset
:可选full_BoolQ、full_CEval等,相关数据集可至魔乐社区MindIE下载,(下载之前,需要申请加入组织,下载之后拷贝到/usr/local/Ascend/atb-models/tests/modeltest/路径下)CEval与MMLU等数据集需要设置shots
(通常设为5)。batch_size
:为batch数
。model_name
:为qwen
。is_chat_model
:为是否支持对话模式,若传入此参数,则进入对话模式
。weight_dir
:为模型权重路径。world_size
:为总卡数。
样例 -BoolQ
bash run.sh pa_bf16 full_BoolQ 1 qwen ${Qwen2.5-72B-Instruct权重路径} 8
样例 -CEval
bash run.sh pa_bf16 full_CEval 5 1 qwen ${Qwen2.5-72B-Instruct权重路径} 8
性能测试
- 进入modeltest路径:
cd /usr/local/Ascend/atb-models/tests/modeltest/
Step1.清理残余进程:
pkill -9 -f 'mindie|python'
Step2.执行命令:
bash run.sh pa_[data_type] performance [case_pair] [batch_size] ([prefill_batch_size]) [model_name] ([is_chat_model]) [weight_dir] [world_size]
参数说明:
data_type
:为数据类型,根据权重目录下config.json的data_type选择bf16或者fp16,例如:pa_bf16。case_pair
:[最大输入长度,最大输出长度]。batch_size
:为batch数
。prefill_batch_size
:为可选参数,设置后会固定prefill的batch size。model_name
:为qwen
。is_chat_model
:为是否支持对话模式,若传入此参数,则进入对话模式
。weight_dir
:为模型权重路径。world_size
:为总卡数。
样例:
bash run.sh pa_bf16 performance [[256,256]] 1 qwen ${Qwen2.5-72B-Instruct权重路径} 8
服务化推理:
【使用场景】对标真实客户上线场景,使用不同并发、不同发送频率、不同输入长度和输出长度分布,去测试服务化性能
配置服务化环境变量
变量含义:expandable_segments-使能内存池扩展段功能,即虚拟内存特性。更多详情请查看昇腾环境变量参考
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
修改服务化参数
cd /usr/local/Ascend/mindie/latest/mindie-service/
vim conf/config.json
修改以下参数:
"httpsEnabled" : false, # 如果网络环境不安全,不开启HTTPS通信,即“httpsEnabled”=“false”时,会存在较高的网络安全风险
...
# 若不需要安全认证,则将以下两个参数设为false
"interCommTLSEnabled" : false,
"interNodeTLSEnabled" : false,
...
"npudeviceIds" : [[0,1,2,3,4,5,6,7]],
...
"modelName" : "qwen" # 不影响服务化拉起
"modelWeightPath" : "权重路径",
"worldSize":8,
Example:仅供参考,请根据实际情况修改。
{
"Version" : "1.0.0",
"LogConfig" :
{
"logLevel" : "Info",
"logFileSize" : 20,
"logFileNum" : 20,
"logPath" : "logs/mindie-server.log"
},
"ServerConfig" :
{
"ipAddress" : "127.0.0.1",
"managementIpAddress" : "127.0.0.2",
"port" : 1025,
"managementPort" : 1026,
"metricsPort" : 1027,
"allowAllZeroIpListening" : false,
"maxLinkNum" : 1000,
"httpsEnabled" : false,
"fullTextEnabled" : false,
"tlsCaPath" : "security/ca/",
"tlsCaFile" : ["ca.pem"],
"tlsCert" : "security/certs/server.pem",
"tlsPk" : "security/keys/server.key.pem",
"tlsPkPwd" : "security/pass/key_pwd.txt",
"tlsCrlPath" : "security/certs/",
"tlsCrlFiles" : ["server_crl.pem"],
"managementTlsCaFile" : ["management_ca.pem"],
"managementTlsCert" : "security/certs/management/server.pem",
"managementTlsPk" : "security/keys/management/server.key.pem",
"managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
"managementTlsCrlPath" : "security/management/certs/",
"managementTlsCrlFiles" : ["server_crl.pem"],
"kmcKsfMaster" : "tools/pmt/master/ksfa",
"kmcKsfStandby" : "tools/pmt/standby/ksfb",
"inferMode" : "standard",
"interCommTLSEnabled" : false,
"interCommPort" : 1121,
"interCommTlsCaPath" : "security/grpc/ca/",
"interCommTlsCaFiles" : ["ca.pem"],
"interCommTlsCert" : "security/grpc/certs/server.pem",
"interCommPk" : "security/grpc/keys/server.key.pem",
"interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
"interCommTlsCrlPath" : "security/grpc/certs/",
"interCommTlsCrlFiles" : ["server_crl.pem"],
"openAiSupport" : "vllm"
},
"BackendConfig" : {
"backendName" : "mindieservice_llm_engine",
"modelInstanceNumber" : 1,
"npuDeviceIds" : [[0,1,2,3,4,5,6,7]],
"tokenizerProcessNumber" : 8,
"multiNodesInferEnabled" : false,
"multiNodesInferPort" : 1120,
"interNodeTLSEnabled" : true,
"interNodeTlsCaPath" : "security/grpc/ca/",
"interNodeTlsCaFiles" : ["ca.pem"],
"interNodeTlsCert" : "security/grpc/certs/server.pem",
"interNodeTlsPk" : "security/grpc/keys/server.key.pem",
"interNodeTlsPkPwd" : "security/grpc/pass/mindie_server_key_pwd.txt",
"interNodeTlsCrlPath" : "security/grpc/certs/",
"interNodeTlsCrlFiles" : ["server_crl.pem"],
"interNodeKmcKsfMaster" : "tools/pmt/master/ksfa",
"interNodeKmcKsfStandby" : "tools/pmt/standby/ksfb",
"ModelDeployConfig" :
{
"maxSeqLen" : 10000,
"maxInputTokenLen" : 2048,
"truncation" : true,
"ModelConfig" : [
{
"modelInstanceType" : "Standard",
"modelName" : "qwen",
"modelWeightPath" : "/home/data/qwen2.5-72B-Instruct",
"worldSize" : 8,
"cpuMemSize" : 5,
"npuMemSize" : -1,
"backendType" : "atb",
"trustRemoteCode" : false
}
]
},
"ScheduleConfig" :
{
"templateType" : "Standard",
"templateName" : "Standard_LLM",
"cacheBlockSize" : 128,
"maxPrefillBatchSize" : 8,
"maxPrefillTokens" : 2048,
"prefillTimeMsPerReq" : 150,
"prefillPolicyType" : 0,
"decodeTimeMsPerReq" : 50,
"decodePolicyType" : 0,
"maxBatchSize" : 8,
"maxIterTimes" : 1024,
"maxPreemptCount" : 0,
"supportSelectBatch" : false,
"maxQueueDelayMicroseconds" : 5000
}
}
}
拉起服务化
# 以下命令需在所有机器上同时执行
# 解决权重加载过慢问题
export OMP_NUM_THREADS=1
# 设置显存比
export NPU_MEMORY_FRACTION=0.95
# 拉起服务化
cd /usr/local/Ascend/mindie/latest/mindie-service/
./bin/mindieservice_daemon
执行命令后,首先会打印本次启动所用的所有参数,然后直到出现以下输出:
Daemon start success!
则认为服务成功启动。
另起客户端
进入相同容器,向服务端发送请求。
更多信息可参考官网信息:MindIE Service
精度化测试样例
需要开启确定性计算环境变量。
export LCCL_DETERMINISTIC=1
export HCCL_DETERMINISTIC=true
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
-并发数需设置为1,确保模型推理时是1batch输入,这样才可以和纯模型比对精度。 -使用MMLU比对精度时,MaxOutputLen应该设为20,MindIE Server的config.json文件中maxSeqLen需要设置为3600,该数据集中有约为1.4w条数据,推理耗时会比较长。
benchmark \
--DatasetPath "/数据集路径/MMLU" \
--DatasetType mmlu \
--ModelName qwen \
--ModelPath "/模型权重路径/Qwen2.5" \
--TestType client \
--Http https://{ipAddress}:{port} \
--ManagementHttp https://{managementIpAddress}:{managementPort} \
--Concurrency 1 \
--MaxOutputLen 20 \
--TaskKind stream \
--Tokenizer True \
--TestAccuracy True
ModelName,ModelPath需要与mindie-service里的config.json里的一致。样例仅供参考,请根据实际情况调整参数。
FAQ
- 对话测试实际执行的 Python 文件为
${llm_path}/examples/run_pa.py
声明
- 本代码仓提到的数据集和模型仅作为示例,这些数据集和模型仅供您用于非商业目的,如您使用这些数据集和模型来完成示例,请您特别注意应遵守对应数据集和模型的License,如您因使用数据集或模型而产生侵权纠纷,华为不承担任何责任。
- 如您在使用本代码仓的过程中,发现任何问题(包括但不限于功能问题、合规问题),请在本代码仓提交issue,我们将及时审视并解答。