MindIE LLM场景快速上手实验

简介: MindIE是昇腾自研推理框架,本实验手册可指导小白用户快速掌握MindIE在LLM(large language model)场景的基本功能,包括:大模型推理功能测试、大模型性能测试、大模型精度测试、服务化推理部署、benchmark测试等。

MindIE是昇腾自研推理框架,本实验手册可指导小白用户快速掌握MindIE在LLM(large language model)场景的基本功能,包括:大模型推理功能测试、大模型性能测试、大模型精度测试、服务化推理部署、benchmark测试等。

1 实验准备

1.1 软硬件环境

本实验使用的设备是800I A2服务器,已经参考官网文档(安装驱动和固件-MindIE安装指南-环境准备-MindIE1.0.0开发文档-昇腾社区)安装好了昇腾硬件驱动。然后,我们选择使用官网提供的镜像(昇腾镜像仓库-昇腾社区)作为实验环境:

我们选择的是 1.0.0-800I-A2-py311-openeuler24.03-lts 版本。

参考这篇文章中的1.1-1.3章节可以完成镜像的拉取、启动和登录:DeepSeekV2-lite 昇腾8卡训练实验指导 - 知乎

1.2 模型和数据集

本实验使用qwen2.5 7B模型进行实验,模型权重下载地址:

PyTorch-NPU/Qwen2.5_7B_Instruct | 魔乐社区

测试的数据使用 GSM8K 数据集,附件 gsm8k_new.jsonl 只包含了7条数据集作为本次实验的数据集。每条数据都包含了“question”和“answer”内容:

{"question": "Weng earns $12 an hour for babysitting. Yesterday, she just did 50 minutes of babysitting. How much did she earn?","answer": "Weng earns 12/60 = $<<12/60=0.2>>0.2 per minute.\nWorking 50 minutes, she earned 0.2 x 50 = $<<0.2*50=10>>10.\n#### 10"}

2 正式实验

2.1 大模型推理功能测试

这个测试是为了验证模型能够在当前环境下跑通,登录镜像后,执行如下命令:

cd /usr/local/Ascend/atb-models
bash examples/models/qwen/run_pa.sh -m /home/jinxiulang/qwen2.5/Qwen2.5_7B_Instruct/ --trust_remote_code true

预期结果如下:

2.2 大模型性能测试

这个测试是为了测试模型的推理性能,登录镜像后,执行如下命令:

cd /usr/local/Ascend/atb-models/tests/modeltest/
bash run.sh pa_bf16 performance [[1024,1024],[256,256]] 16 qwen /home/jinxiulang/qwen2.5/Qwen2.5_7B_Instruct 2

注:[[1024,1024],[256,256]]代表要测试输入长度为1024、输出长度为1024的场景和输入长度为256、输出长度为256的场景;16代表batch_size;最后的“2”代表2卡并行(tensor并行),也可以设置为1,表示单卡运行。

预期结果如下:

2.3 大模型精度测试

这个测试是为了测试模型的推理结果正确性,登录镜像后,执行如下命令:

cd /usr/local/Ascend/atb-models/tests/modeltest/
bash run.sh pa_bf16 precision_single [[256,256]] full_GSM8K 1 qwen /home/jinxiulang/qwen2.5/Qwen2.5_7B_Instruct 2

注:[[256,256]]是输入输出长度;“1”代表batch_size;full_GSM8K是文件名,要把1.2节中提到的gsm8k_new.jsonl重命名为full_GSM8K,不带后缀,放到modeltest目录下;最后的“2”代表2卡并行。

预期结果如下:

注:这里的精度测试只是会把每条数据的结果打印,如果要统计整个数据集的精度,需要使用2.6中的方法。

2.4 服务化推理部署

这个测试是为了测试模型服务化部署的功能,登录镜像后,执行如下命令,创建一个模型服务:

cd /usr/local/Ascend/mindie/latest/mindie-service/

然后打开配置文件(./conf/config.json),配置“modelWeightPath”参数,把qwen模型路径复制上去,其他的参数使用默认值即可:

然后执行如下命令启动服务:

./bin/mindieservice_daemon

启动成功的预期结果如下:

此时,相当于开启了一个大模型推理服务,随时准备接收推理请求。

这时候,我们可以再打开一个服务器界面,输入如下命令请求推理:

curl 127.0.0.1:1035/generate -d '{
"prompt": "今天天气不错",
"max_tokens": 32,
"stream": false,
"do_sample":true,
"repetition_penalty": 1.00,
"temperature": 0.01,
"top_p": 0.001,
"top_k": 1,
"model": "qwen"
}'

注:127.0.0.1:1035是conf/config.json里面的ipAddress:port。

预期结果如下:

2.5 benchmark性能测试

这个测试是为了测试模型服务化部署的性能,详情可以参考 文本推理样例-Client推理模式-样例代码-MindIE Benchmark-MindIE Service Tools-MindIE Service组件-MindIE Service开发指南-服务化集成部署-MindIE1.0.0开发文档-昇腾社区 。登录镜像后,首先按2.4部署一个推理服务。然后如下执行benchmark(建议把执行命令放在一个sh脚本里面执行):

benchmark \
--DatasetType "synthetic" \
--ModelName qwen \
--ModelPath "/home/jinxiulang/qwen2.5/Qwen2.5_7B_Instruct/" \
--TestType vllm_client \
--Http http://127.0.0.1:1035 \
-- ManagementHttp http://127.0.0.2:1033 \
--Concurrency 128 \
--MaxOutputLen 20 \
--TaskKind stream \
--Tokenizer True \
--SyntheticConfigPath ./synthetic_config.json

注:ManagementHttp是conf/config.json里面的managementIpAddress: managementPort;synthetic_config.json只需要从/usr/local/lib/python3.11/site-packages/mindiebenchmark/config/synthetic_config.json 拷贝过来就行。

预期结果如下:

上面测试性能使用的是合成数据,如果要使用真实的GSM8K数据测试,执行如下命令:

SMPL_PARAM='{"temperature":0.5,"top_k":10,"top_p":0.9,"seed":1234,"repetition_penalty":1}'
benchmark \
--DatasetPath "/home/jinxiulang/datasets/gsm8k_json" \
--DatasetType "gsm8k" \
--ModelName qwen \
--ModelPath "/home/jinxiulang/qwen2.5/Qwen2.5_7B_Instruct/" \
--TestType client \
--Http http://127.0.0.1:1035 \
--ManagementHttp http://127.0.0.2:1033 \
--Concurrency 128 \
--TaskKind stream \
--Tokenizer True \
--MaxOutputLen 512 \
--DoSampling True \
--SamplingParams $SMPL_PARAM

注:上面的—DatasetPath对应的是存放gsm8k_new.jsonl的目录。

预期结果如下:

2.6 benchmark精度测试

这个测试是为了测试模型服务化部署的精度,详情可以参考 https://www.hiascend.com/document/detail/zh/mindie/100/mindieservice/servicedev/mindie_service0011.html 。登录镜像后,首先按2.4部署一个推理服务。然后如下执行benchmark(建议把执行命令放在一个sh脚本里面执行):

benchmark \
--DatasetPath "/home/jinxiulang/datasets/gsm8k_json" \
--DatasetType "gsm8k" \
--ModelName "qwen" \
--ModelPath "/home/jinxiulang/qwen2.5/Qwen2.5_7B_Instruct/" \
--TestType client \
--Http http://127.0.0.1:1045 \
--ManagementHttp http://127.0.0.2:1047 \
--Concurrency 16 \
--MaxOutputLen 512 \
--TestAccuracy True

预期结果如下:

注:目前只支持gsm8k和mmlu这种有标准答案的数据集,客户数据集需要根据业务逻辑自己实现测评方法。

3 常见报错

1,文件permission error,如:

解决方案:根据提示的权限错误进行权限设置,如

sudo chown root:root xxx_file
sudo chown -R root:root xxx_directory
sudo chmod 640 xxx_file
sudo chmod -R 640 xxx_directory

2,启动服务失败

解决方案:可以在logs/mindservice.log里面查看原因,常见的是端口占用导致起服务失败,这种情况下可以修改conf/config.json里面的port和managementPort。

目录
相关文章
|
机器学习/深度学习 分布式计算 算法
基于通用LLM的一次测试用例自动生成的实验
基于通用LLM的一次测试用例自动生成的实验
2854 0
|
8月前
|
存储 弹性计算 调度
基于Knative的LLM推理场景弹性伸缩方案
Knative的基于请求弹性配置与大语言模型(LLM)的推理场景高度契合。此外,它的资源降配特性可以显著帮助用户降低成本。本文详细介绍基于 Knative 的 LLM 推理场景弹性伸缩方案。
|
8月前
|
自然语言处理 人机交互 数据库
TransferTOD:利用LLM解决TOD系统在域外场景槽位难以泛化的问题
任务型对话系统旨在高效处理任务导向的对话,如何利用任务型对话系统准确、高效、合理地完成信息采集的工作一直是一项关键且具有挑战性的任务。
292 18
|
8月前
|
存储 缓存 人工智能
深度解析CPFS 在 LLM 场景下的高性能存储技术
本文深入探讨了CPFS在大语言模型(LLM)训练中的端到端性能优化策略,涵盖计算端缓存加速、智能网卡加速、数据并行访问及数据流优化等方面。重点分析了大模型对存储系统的挑战,包括计算规模扩大、算力多样性及数据集增长带来的压力。通过分布式P2P读缓存、IO加速、高性能存算通路技术以及智能数据管理等手段,显著提升了存储系统的吞吐量和响应速度,有效提高了GPU利用率,降低了延迟,从而加速了大模型的训练进程。总结了CPFS在AI训练场景中的创新与优化实践,为未来大模型发展提供了有力支持。
|
9月前
|
缓存 自然语言处理 API
Ascend推理组件MindIE LLM
MindIE LLM是基于昇腾硬件的大语言模型推理组件,提供高性能的多并发请求调度与优化技术,如Continuous Batching、PageAttention等,支持Python和C++ API,适用于高效能推理需求。其架构包括深度定制优化的模型模块、文本生成器和任务调度管理器,支持多种模型框架和量化方式,旨在提升大规模语言模型的推理效率和性能。
|
机器学习/深度学习 SQL 人工智能
Web LLM 实验:间接注入
Web LLM 实验:间接注入
|
机器学习/深度学习 存储 SQL
Web LLM 实验:利用 LLM 中不安全的输出处理
Web LLM 实验:利用 LLM 中不安全的输出处理
|
SQL 机器学习/深度学习 人工智能
Web LLM 实验:利用 LLM API 实现 SQL 注入
Web LLM 实验:利用 LLM API 实现 SQL 注入
|
机器学习/深度学习 SQL 人工智能
Web LLM 实验:利用 LLM API 实现命令注入
Web LLM 实验:利用 LLM API 实现命令注入
|
人工智能 自然语言处理 数据库
【AI 生成式】大语言模型(LLM)有哪些典型的应用场景?
【5月更文挑战第5天】【AI 生成式】大语言模型(LLM)有哪些典型的应用场景?