云计算百科
云计算领域专业知识百科平台

Atlas 800 9000服务器 910B 上部署大模型,以及测试

1.查看驱动,并进行更新

npu-smi info

升级最新的驱动与固件,前往官网下载最新的 驱动与固件 社区版-固件与驱动-昇腾社区

注意产品系列和产品型号不要选错,这边我们下载 .run的版本

cd /home/HwHiAiUser
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Ascend%20HDK/Ascend%20HDK%2023.0.2.1/Ascend-hdk-910-npu-driver_23.0.2_linux-aarch64.run
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Ascend%20HDK/Ascend%20HDK%2023.0.2.1/Ascend-hdk-910-npu-firmware_7.1.0.4.220.run
chmod 777 Ascend-hdk-910-npu-driver_23.0.2_linux-aarch64.run
chmod 777 Ascend-hdk-910-npu-firmware_7.1.0.4.220.run
sudo ./Ascend-hdk-910-npu-driver_23.0.2_linux-aarch64.run –full –force
sudo ./Ascend-hdk-910-npu-firmware_7.1.0.4.220.run –full –force

 然后我们重启一下服务器  

sudo reboot

2.下载 modelscpoe ,指定版本1.18.0

pip install modelscope==1.18.0

3. 下载模型权重

 (如果想要跑其他模型,可以去魔塔社区按照模型下载的指引下载魔搭社区) 

 具体方式就是复制其中的SDK下载的内容到 download.py文件中,并python 下载它

cd /home/HwHiAiUser
vim download.py
cat download.py

#模型下载 from modelscope import snapshot_download model_dir = snapshot_download('Qwen/Qwen2-7B-Instruct',cache_dir="/home/HwHiAiUser/")

##添加cachedir 的路径为当前目录

python3 download.py

可能会有一点卡顿,但是最终我们会下载成功的

4.构建mindie镜像容器

cd /home/HwHiAiUser

4.1.下载docker

yum install docker

4.2.更新docker源

vim /etc/docker/daemon.json

{ "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }

systemctl restart docker.service

 4.3 拉取镜像

docker pull swr.cn-east-317.qdrgznjszx.com/sxj731533730/mindie:atlas_800_9000

4.4 创建镜像

vim docker_run.sh

#!/bin/bash docker_images=swr.cn-east-317.qdrgznjszx.com/sxj731533730/mindie:atlas_800_9000 model_dir=/home/HwHiAiUser #根据实际情况修改挂载目录 docker run -it –name qdaicc –ipc=host –net=host \\         –device=/dev/davinci3 \\         –device=/dev/davinci4 \\         –device=/dev/davinci5 \\         –device=/dev/davinci6 \\         –device=/dev/davinci7 \\         –device=/dev/davinci_manager \\         –device=/dev/devmm_svm \\         –device=/dev/hisi_hdc \\         -v /usr/local/dcmi:/usr/local/dcmi \\         -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \\         -v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common \\         -v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver \\         -v /etc/ascend_install.info:/etc/ascend_install.info \\         -v /etc/vnpu.cfg:/etc/vnpu.cfg \\         -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \\         -v ${model_dir}:${model_dir} \\         -v  /var/log/npu:/usr/slog ${docker_images} \\         /bin/bash 

bash docker_run.sh
exit

5. 拉起大模型服务

进入mindie容器,找到它的container_id ,这边假设为xxxxxxx

docker ps -a
docker exec -it xxxxxxx /bin/bash

5.1 修改模型的配置文件

我们来到模型的下载路径下,要修改的是下面的这个config文件,不同模型的路径不同但是这个config文件都会存在

cd /home/HwHiAiUser/Qwen/Qwen2-7B
vim config.json

将其中的 btype 改为 float16

 5.2 在mindie上配置模型的相关信息

查看本机的ip地址,我们关注198.168开头的这个ip 

ifconfig

cd /usr/local/Ascend/mindie/latest/mindie-service
vim conf/config.json

 修改以下参数(根据自己的情况进行更改)

"ipAddress" : "192.168.2.85" // 改为自己本机的ip地址 "managementIpAddress" : "192.168.2.85"

"port" : "1025" // mindie服务对外访问的端口

"httpsEnabled" : false "npuDeviceIds" : [[0,1,2,3]], // 使用的npu_id

"truncation" : true

"modelName" : "Qwen2-7B" // 模型名称 "modelWeightPath" : "/home/HwHiAiUser/Qwen/Qwen2-7B" // 存放模型的路径名称 "worldSize" : 4 // 使用的npu数量 "maxInputTokenLen" : 4096

"maxIterTimes" : 4096

{
"Version" : "1.0.0",
"LogConfig" :
{
"logLevel" : "Info",
"logFileSize" : 20,
"logFileNum" : 20,
"logPath" : "logs/mindie-server.log"
},

"ServerConfig" :
{
"ipAddress" : "192.168.2.85",
"managementIpAddress" : "192.168.2.85",
"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" : true,
"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]],
"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" : 2560,
"maxInputTokenLen" : 4096,
"truncation" : true,
"ModelConfig" : [
{
"modelInstanceType" : "Standard",
"modelName" : "Qwen2-7B",
"modelWeightPath" : "/home/HwHiAiUser/Qwen/Qwen2-7B",
"worldSize" : 4,
"cpuMemSize" : 5,
"npuMemSize" : -1,
"backendType" : "atb",
"trustRemoteCode" : false
}
]
},

"ScheduleConfig" :
{
"templateType" : "Standard",
"templateName" : "Standard_LLM",
"cacheBlockSize" : 128,

"maxPrefillBatchSize" : 50,
"maxPrefillTokens" : 8192,
"prefillTimeMsPerReq" : 150,
"prefillPolicyType" : 0,

"decodeTimeMsPerReq" : 50,
"decodePolicyType" : 0,

"maxBatchSize" : 200,
"maxIterTimes" : 4096,
"maxPreemptCount" : 0,
"supportSelectBatch" : false,
"maxQueueDelayMicroseconds" : 5000
}
}
}

 5.3 启动大模型服务

chmod -R 750 /home/HwHiAiUser/Qwen/Qwen2-7B
cd /usr/local/Ascend/mindie/latest/mindie-service
./bin/mindieservice_daemon

5.4 记录大模型启动成功的日志

6. 大模型提问测试

重新启动一个终端,并输入以下指令查看是否后台在正常运作大模型

npu-smi info

 提问相关的问题,注意这边的ip和端口

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"inputs": "停车识别系统的主要识别对象",
"parameters": {
"decoder_input_details": true,
"details": true,
"do_sample": true,
"max_new_tokens": 50,
"repetition_penalty": 1.03,
"return_full_text": false,
"seed": null,
"temperature": 0.5,
"top_k": 10,
"top_p": 0.95,
"truncate": null,
"typical_p": 0.5,
"watermark": false
}
}' http://192.168.2.85:1025/generate

测试结果,注意格式!!!

7.进行压力测试(性能测试)

确保大模型已经在后台跑起来了,我们这采取的方式是压力测试benchmark ,具体可看以下配置MindIE Benchmark-MindIE Benchmark-MindIE Service开发指南-服务化集成部署-MindIE1.0.RC2开发文档-昇腾社区 7.1 进入容器

docker exec -it xxxxxx /bin/bash

7.2 创建压力测试配置文件

cd /usr/local/Ascend/atb-models/tests/modeltest/
vim synthetic_config.json

{     "Input":{          "Method": "uniform",          "Params": {"MinValue": 512, "MaxValue": 512 }    },     "Output": {          "Method": "gaussian",          "Params": {"Mean": 100, "Var": 200, "MinValue": 512, "MaxValue": 512 }    },     "RequestCount": 16 }

 简单说明一下上面参数的含义:输入的tokens是512,输出的是tokens是512,同时16个并发请求

 7.3 修改文件权限

chmod 640 synthetic_config.json

 7.4 设置结果在控制界面

export MINDIE_LOG_TO_STDOUT="benchmark:1; client:1"

7.5 测试指令

下面是指令详解

benchmark \\

–DatasetType "synthetic" \\ # 数据集类型

–ModelName Qwen2-7B \\ # 模型名称

–ModelPath "/home/HwHiAiUser/Qwen/Qwen2-7B" \\ # 模型位置

–TestType vllm_client \\ # 测试客户端类型

–Http http:// 192.168.2.85:1025 \\ #推理服务API地址

–ManagementHttp http:// 192.168.2.85:1026 \\ # 管理接口地址

–Concurrency 16 \\ # 高并发压力

–MaxOutputLen 512 \\  # 生成长文本

–TaskKind stream \\ # 流式请求

–Tokenizer True \\ # 是否启用分词器

–SyntheticConfigPath ./synthetic_config.json # 控制输入输出数据分布

benchmark –DatasetType "synthetic" –ModelName Qwen2-7B –ModelPath "/home/HwHiAiUser/Qwen/Qwen2-7B" –TestType vllm_client –Http http://192.168.2.85:1025 –ManagementHttp http://192.168.2.85:1026 –Concurrency 16 –MaxOutputLen 512 –TaskKind stream –Tokenizer True –SyntheticConfigPath ./synthetic_config.json

7.6 结果分析

我们主要是关心 GenerateSpeedPerClient 这个参数,这个参数可以清晰的说明当前gpu的推理速度(7.738tokens/s 说慢不慢,说快不快 哈哈)

测试数据解释

指标

单位

说明

FirstTokenTime

毫秒

首 Token 延迟:从请求发送到收到第一个输出 Token 的时间(含网络+服务端处理)(反映用户体验的响应速度)

高并发下首 Token 延迟较高

DecodeTime

毫秒

单 Token 解码延迟:每个输出 Token 的解码耗时(模型推理核心时间)

高并发导致某些请求排队时间激增

LastDecodeTime

毫秒

最后一个 Token 解码延迟:生成结束前的最终解码耗时

如果较首 Token 略高,可能因上下文增长导致计算量增加

GenerateTime

毫秒

总生成时间**:从请求开始到完整输出生成的总耗时

与 `MaxOutputLen` 匹配,性能和效果较为理想

Token统计

指标

单位

说明

InputTokens

输入 Token 数量

固定为512(由 `synthetic_config.json` 控制)。

GeneratedTokens

输出 Token 数量

固定为512(受 `–MaxOutputLen 512` 限制)

GeneratedTokenSpeed

每秒生成的 Token 数(整体吞吐量)

说明模型并行处理能力

其它指标

指标

单位

说明

Tokenizer

毫秒

输入分词耗时

如果为0,可能未启用或未记录分词步骤

Detokenizer

毫秒

输出反分词耗时

反序列化开销时间

通用指标

指标

说明

TimeElapsed

总测试耗时

测试运行时间

Concurrency

并发请求数

反序列化开销时间

Throughput

请求吞吐量

吞吐量,受限于模型生成速度

GenerateSpeed

全局 Token 生成速度

所有请求的 Token 总和除以总时间

GenerateSpeedPerClient

单客户端 Token 速度

每个并发请求的平均速度

8. 进行精度测试

确保已经上传data.tar已经上传到服务器

8.1 进入容器

docker exec -it xxxxxx /bin/bash

8.2 将文件解压到指定目录下 

cd /usr/local/Ascend/atb-models/tests/modeltest
mkdir data
cd data
cp /home/HwHiAiUser/data.tar .
tar -xvf data.tar
rm -rf data.tar

赞(0)
未经允许不得转载:网硕互联帮助中心 » Atlas 800 9000服务器 910B 上部署大模型,以及测试
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!