LLM训推适配-[昇腾910B]-qwen2.5精度测试+高效推理

mindie_qwen2.5推理适配

虽然mindie暂未宣布支持Qwen2.5,但是Qwen2.5和Qwen2模型结构一致,个人理解可直接按照qwen2的方式做迁移部署.

1.准备

模型权重
/path/to/Qwen2p5-72B-Instruct/
运行环境
本次验证使用mindieT65版本

如果只需要启动服务,可直接跳至2.3章节

2.适配验证

启动容器

docker run --rm -it -u root --name=mindie_t65 --net=host --privileged=true -w /opt --device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc -v /etc/ascend_install.info:/etc/ascend_install.info -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ -v /usr/local/sbin/:/usr/local/sbin/ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi -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 /etc/hccn.conf:/etc/hccn.conf -v /etc/localtime:/etc/localtime:ro -v /host_model_path/:/opt/files -v /tmp:/tmp mindie:t65 /bin/bash

2.1 推理加速框架验证

ATB推理
atb_models的代码路径会随着镜像版本变换,该镜像的路径是:/usr/local/Ascend/atb_models/

${llm_path}目录执行以下指令

bash examples/models/qwen/run_pa.sh -m ${weight_path}

注:

1.启动量化推理时,请在权重路径的config.json文件中添加(或修改)quantize字段,值为相应量化方式,例如"quantize": "w8a8""quantize": "w8a16"

2.对于chat模型需要开启chat模式才能正常输出。
执行:

bash examples/models/qwen/run_pa.sh -m ${weight_path} -c true

run_pa.py脚本参数介绍

  • 脚本:${llm_path}/examples/run_pa.py
  • 功能:Paged Attention场景下模型推理的启动脚本
  • 参数说明
    参数名称是否为必选类型默认值
    描述
    model_pathstring模型权重路径
    input_textsstring[“What’s deep learning?”]推理文本,多条推理文本间使用空格分割
    input_idsstringNone推理文本经过模型分词器处理后得到的token id,多条推理请求间使用空格分割,单个推理请求内每个token使用逗号隔开
    input_filejsonl格式文件None包含多轮对话文本的文件。
    仅支持jsonl格式文件,每一行必须为List[Dict]格式的按时间顺序排序的对话数据,每个Dict字典中需要至少包含"role"和"content"两个字段
    input_dictstringNone推理文本以及对应的adapter名称。格式形如:‘[{“prompt”: “A robe takes 2 bolts of blue fiber and half that much white fiber. How many bolts in total does it take?”, “adapter”: “adapter1”}, {“prompt”: “What is deep learning?”, “adapter”: “base”}]’
    max_prefill_batch_sizeintNone模型推理最大Prefill Batch size
    max_batch_sizeint1模型推理最大Batch size
    max_input_lengthint1024推理文本最大token数
    max_output_lengthint20推理结果最大token数
    max_position_embeddingsint或者NoneNone模型可接受的最大上下文长度。当此值为None时,则从模型权重文件中读取
    max_prefill_tokensint-1模型Prefill推理阶段最大可接受的token数。若输入为-1,则max_prefill_tokens = max_batch_size * (max_input_length + max_output_length)
    block_sizeint128Kv cache分块存储,每块存储的最大token数,默认为128
    chat_templatestringNone对话模型的prompt模板
    ignore_eosboolstore_true当推理结果中遇到eos token(句子结束标识符)时,是否结束推理。若传入此参数,则忽略eos token
    is_chat_modelboolstore_true是否支持对话模式。若传入此参数,则进入对话模式
    is_flash_modelboolstore_false是否运行Paged Attention,默认运行Paged Attention,若传入此参数,则运行Flash Attention
    is_embedding_modelboolstore_true是否为embedding类模型。默认为因果推断类模型,若传入此参数,则为embedding类模型
    load_tokenizerstring“True”是否加载tokenizer。若传入False,则必须传入input_ids参数,且推理输出为token id
    enable_atb_torchboolstore_true是否使用Python组图。默认使用C++组图,若传入此参数,则使用Python组图
    kw_argsstring“”扩展参数,支持用户通过扩展参数进行功能扩展

2.2 精度/性能测试

脚本路径:atb_models/tests/modeltest/

示例:

bash run.sh pa_fp16 full_BoolQ 1 qwen ${Qwen2.5-72b权重路径} 8

详细文档可参考atb_models/test/modeltest/readme.md

2.3 推理服务框架验证

使用mindie-service推理服务部署框架

注:mindie版本不同,推理服务配置文件变化较大!!!

推理服务配置文件修改
路径:$MIES_INSTALL_PATH/conf/config.json
修改:

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

    "ServerConfig" :
    {
        "ipAddress" : "127.0.0.1",
        "managementIpAddress": "127.0.0.1",
        "port" : 31003,
        "managementPort" : 31003,
        "maxLinkNum" : 200,
        "httpsEnabled" : false,
        "fullTextEnabled" : false,
        "maxHeaderLen" : 512,
        "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"
    },

    "BackendConfig": {
        "backendName" : "mindieservice_llm_engine",
        "tokenizerProcessNumber" : 8,
        "multiNodesInferEnabled": false,
        "multiNodesInferPort": 1120,
        "interNodeTLSEnabled": true,
        "interNodeTlsCaFile": "security/ca/ca.pem",
        "interNodeTlsCert": "security/certs/server.pem",
        "interNodeTlsPk": "security/keys/server.key.pem",
        "interNodeTlsPkPwd": "security/pass/mindie_server_key_pwd.txt",
        "interNodeKmcKsfMaster": "tools/pmt/master/ksfa",
        "interNodeKmcKsfStandby": "tools/pmt/standby/ksfb",
        "ModelDeployConfig":
        {
            "modelInstanceNumber" : 1,
            "maxSeqLen" : 8192,
            "maxInputTokenLen" : 4096,
            "truncation" : false,
            "npuDeviceIds" : [[0,1,2,3]],
            "ModelConfig" : [
                {
                    "modelInstanceType": "Standard",
                    "modelName" : "qwen2p5_72b_baseline",
                    "modelWeightPath" : "/app/appdata/",
                    "worldSize" : 4,
                    "cpuMemSize" : 5,
                    "npuMemSize" : 16,
                    "backendType": "atb"
                }
            ]
        },

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

            "maxPrefillBatchSize" : 24,
            "maxPrefillTokens" : 8192,
            "prefillTimeMsPerReq" : 60,
            "prefillPolicyType" : 0,

            "decodeTimeMsPerReq" : 60,
            "decodePolicyType" : 0,

            "maxBatchSize" : 24,
            "maxIterTimes" : 2048,
            "maxPreemptCount" : 0,
            "supportSelectBatch" : false,
            "maxQueueDelayMicroseconds" : 5000
        }
    }
}

各参数的作用参考:
https://www.hiascend.com/document/detail/zh/mindie/10RC2/mindieservice/servicedev/mindie_service0004.html

服务启动


source /usr/local/Ascend/ascend-toolkit/set_env.sh 
source /usr/local/Ascend/mindie/set_env.sh         
source /usr/local/Ascend/mindie/latest/mindie-service/set_env.sh 
source /usr/local/Ascend/mindie/latest/mindie-llm/set_env.sh     
source /usr/local/Ascend/nnal/atb/set_env.sh 
source /usr/local/Ascend/atb_models/set_env.sh 

export HOST_IP=1.1.1.1
export MIES_CONTAINER_MANAGEMENT_IP=$HOST_IP
export MIES_CONTAINER_IP=$HOST_IP



cd /usr/local/Ascend/mindie/latest/mindie-service/bin
./mindieservice_daemon 


服务测试
curl --location ‘http://ip:port/v1/chat/completions’ --header ‘Content-Type: application/json’ --data ‘{ “model”:“test”, “messages”: [ { “role”: “user”, “content”: “你好。” } ], “max_tokens”:2}’

### Qwen2.5模型本地部署指南 #### 环境准备 对于希望在本地环境中部署和测试Qwen2.5模型的用户来说,确保满足最低硬件需求至关重要。荐配置包括至少16GB RAM以及支持CUDA的NVIDIA GPU以加速推理过程[^1]。 #### 安装依赖库 首先需安装Python 3.x版本,并通过pip工具安装必要的软件包。建议创建一个新的虚拟环境来管理项目依赖项。以下是所需的主要Python库列表: ```bash conda create -n qwen_env python=3.8 conda activate qwen_env pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 pip install transformers sentencepiece ``` 这些命令会设置好PyTorch框架及其扩展模块,还有Hugging Face Transformers库用于加载预练的语言模型[^2]。 #### 下载并加载模型 完成上述准备工作之后,可以从HuggingFace Model Hub下载Qwen2.5模型权重文件。具体操作如下所示: ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_name_or_path = "Qwen/Qwen-7B" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) ``` 此段代码片段展示了如何利用`transformers`库中的API接口获取指定名称路径下的大型语言模型实例对象。 #### 测试对话功能 最后一步是对已成功加载到内存中的LLM执行简单的交互式查询请求,验证其基本工作状态良好。下面给出了一种简单的方式来进行初步的功能性检测: ```python input_text = "你好,世界!" inputs = tokenizer(input_text, return_tensors="pt") outputs = model.generate(**inputs, max_length=50) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ``` 这段脚本实现了向模型输入一段中文问候语句作为提示词,然后让模型基于该上下文生成后续可能的回答内容。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值