云服务器内容精选

  • Step6 启动推理服务 配置需要使用的NPU卡编号。例如:实际使用的是第1张卡,此处填写“0”。 export ASCEND_RT_VISIBLE_DEVI CES =0 如果启动服务需要使用多张卡,例如:实际使用的是第1张和第2张卡,此处填写为“0,1”,以此类推。 export ASCEND_RT_VISIBLE_DEVICES=0,1 NPU卡编号可以通过命令npu-smi info查询。 配置PYTHONPATH。 export PYTHONPATH=$PYTHONPATH:${vllm_path} ${vllm_path} 填写ascend_vllm文件夹绝对路径。 高阶配置(可选)。 词表切分。 在分布式场景下,默认不使用词表切分能提升推理性能,同时也会增加单卡的显存占用。不建议开启词表并行,如确需使用词表切分,配置以下环境变量: export USE_VOCAB_PARALLEL=1 #打开词表切分开关 unset USE_VOCAB_PARALLEL #关闭词表切分开关 配置后重启服务生效。 Matmul_all_reduce融合算子。 使用Matmul_all_reduce融合算子能提升全量推理性能;该算子要求驱动和固件版本为Ascend HDK 24.1.RC1.B011及以上,默认不开启。如需开启,配置以下环境变量: export USE_MM_ALL_REDUCE_OP=1 #打开Matmul_all_reduce融合算子 unset USE_MM_ALL_REDUCE_OP #关闭Matmul_all_reduce融合算子 配置后重启服务生效。 查看详细日志。 查看详细耗时日志可以辅助定位性能瓶颈,但会影响推理性能。如需开启,配置以下环境变量: export DETAIL_TIME_ LOG =1 #打开打印详细日志 export RAY_DEDUP_LOGS=0 #打开打印详细日志 unset DETAIL_TIME_LOG #关闭打印详细日志 配置后重启服务生效。 启动服务与请求。此处提供vLLM服务API接口启动和OpenAI服务API接口启动2种方式。详细启动服务与请求方式参考:https://docs.vllm.ai/en/latest/getting_started/quickstart.html。 以下服务启动介绍的是在线推理方式,离线推理请参见https://docs.vllm.ai/en/latest/getting_started/quickstart.html#offline-batched-inference。 通过vLLM服务API接口启动服务 在ascend_vllm目录下通过vLLM服务API接口启动服务,具体操作命令如下,API Server的命令相关参数说明如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 通过OpenAI服务API接口启动服务 在ascend_vllm目录下通OpenAI服务API接口启动服务,具体操作命令如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.openai.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 具体参数说明如下: --model ${container_model_path}:模型地址,模型格式是HuggingFace的目录格式。即Step3 上传代码包和权重文件上传的HuggingFace权重文件存放目录。 --max-num-seqs:最大同时处理的请求数,超过后拒绝访问。 --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。max-model-len的值必须小于config.json文件中的"seq_length"的值,否则推理预测会报错。config.json存在模型对应的路径下,例如:${container_work_dir}/chatglm3-6b/config.json。不同模型推理支持的max-model-len长度不同,具体差异请参见附录:基于vLLM(v0.3.2)不同模型推理支持的max-model-len长度说明。 --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。 --dtype:模型推理的数据类型。支持FP16和BF16数据类型推理。float16表示FP16,bfloat16表示BF16。 --tensor-parallel-size:模型并行数。取值需要和启动的NPU卡数保持一致,可以参考1。此处举例为1,表示使用单卡启动服务。 --block-size:PagedAttention的block大小,推荐设置为128。 --host=${docker_ip}:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:服务部署的端口。 --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 --trust-remote-code:是否相信远程代码。 服务启动后,会打印如下类似信息。 server launch time cost: 15.443044185638428 s INFO: Started server process [2878]INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
  • 附录:基于vLLM(v0.3.2)不同模型推理支持的max-model-len长度说明 基于vLLM(v0.3.2)部署推理服务时,不同模型推理支持的max-model-len长度说明如下面的表格所示。如需达到以下值,需要将--gpu-memory-utilization设为0.9,qwen系列、qwen1.5系列、llama3系列模型还需打开词表切分配置export USE_VOCAB_PARALLEL=1。 序号 模型名称 4*64GB 8*32GB 1 qwen1.5-72b 24576 8192 2 qwen-72b 24576 8192 3 llama3-70b 32768 8192 4 llama2-70b 98304 32768 6 llama-65b 24576 8192 序号 模型名称 2*64GB 4*32GB 1 qwen1.5-32b 65536 24576 序号 模型名称 1*64GB 1*32GB 1 qwen1.5-7b 49152 16384 2 qwen-7b 49152 16384 3 llama3-8b 98304 32768 4 llama2-7b 126976 16384 5 chatglm3-6b 126976 65536 6 chatglm2-6b 126976 65536 序号 模型名称 1*64GB 2*32GB 1 qwen1.5-14b 24576 24576 2 qwen-14b 24576 24576 3 llama2-13b 24576 24576 说明:机器型号规格以卡数*显存大小为单位,如4*64GB代表4张64GB显存的NPU卡。
  • Step5 进入容器安装推理依赖软件 通过容器名称进入容器中。默认使用ma-user用户执行后续命令。 docker exec -it ${container_name} bash 上传代码和权重到宿主机时使用的是root用户,此处需要执行如下命令统一文件属主为ma-user用户。 #统一文件属主为ma-user用户 sudo chown -R ma-user:ma-group ${container_work_dir} # ${container_work_dir}:/home/ma-user/ws 容器内挂载的目录 #例如:sudo chown -R ma-user:ma-group /home/ma-user/ws 解压算子包并将相应算子安装到环境中。 unzip AscendCloud-OPP-*.zip pip install ascend_cloud_ops-1.0.0-py3-none-any.whl pip install cann_ops-1.0.0-py3-none-any.whl 解压软件推理代码并安装依赖包。 unzip AscendCloud-3rdLLM-*.zip cd llm_inference pip install -r requirements.txt 运行推理构建脚本build.sh文件,会自动获取ascend_vllm_adapter文件夹中提供的vLLM相关算子代码。 cd llm_inference bash build.sh 运行完后,在当前目录下会生成ascend_vllm文件夹,即为昇腾适配后的vLLM代码。
  • Step4 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。 docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /etc/ascend_install.info:/etc/ascend_install.info \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /var/log/npu/:/usr/slog \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v ${dir}:${container_work_dir} \ --net=host \ --name ${container_name} \ ${image_id} \ /bin/bash 参数说明: --device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7。 -v ${dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的大文件系统,dir为宿主机中文件目录,${container_work_dir}为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 {image_id} 为docker镜像的ID,在宿主机上可通过docker images查询得到。
  • Step1 检查环境 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • 模型软件包结构说明 本教程需要使用到的AscendCloud-3rdLLM-xxx.zip软件包中的关键文件介绍如下。 ├──llm_tools #推理工具包 ├──llm_evaluation #推理评测代码包 ├──benchmark_eval # 精度评测 ├── config ├── config.json # 请求的参数,根据实际启动的服务来调整 ├── mmlu_subject_mapping.json # 数据集配置 ├── ... ├── evaluators ├── evaluator.py # 数据集数据预处理方法集 ├── model.py # 发送请求的模块,在这里修改请求响应。目前支持vllm.openai,atb的tgi模板 ├── ... ├── eval_test.py # 启动脚本,建立线程池发送请求,并汇总结果 ├── service_predict.py # 发送请求的服务。支持vllm的openai,atb的tgi模板 ├── ... ├──benchmark_tools #性能评测 ├── benchmark.py # 可以基于默认的参数跑完静态benchmark和动态benchmark ├── benchmark_parallel.py # 评测静态性能脚本 ├── benchmark_serving.py # 评测动态性能脚本 ├── benchmark_utils.py # 抽离的工具集 ├── generate_datasets.py # 生成自定义数据集的脚本 ├── requirements.txt # 第三方依赖 ├── ... ├──llm_inference #推理代码 ├── ascend_vllm_adapter #昇腾vLLM使用的算子模块 ├── ascend.txt #基于开源vLLM适配过NPU的patch脚本 ├── autosmoothquant_ascend.txt #基于开源autosmoothquant适配过NPU的patch脚本 ├── build.sh #推理构建脚本 ├── requirements.txt # 第三方依赖
  • 支持的模型列表和权重文件 本方案支持vLLM的v0.3.2版本。不同vLLM版本支持的模型列表有差异,具体如表3所示。 表3 支持的模型列表和权重获取地址 序号 模型名称 支持vLLM v0.3.2 开源权重获取地址 1 llama-7b √ https://huggingface.co/huggyllama/llama-7b 2 llama-13b √ https://huggingface.co/huggyllama/llama-13b 3 llama-65b √ https://huggingface.co/huggyllama/llama-65b 4 llama2-7b √ https://huggingface.co/meta-llama/Llama-2-7b-chat-hf 5 llama2-13b √ https://huggingface.co/meta-llama/Llama-2-13b-chat-hf 6 llama2-70b √ https://huggingface.co/meta-llama/Llama-2-70b-hf https://huggingface.co/meta-llama/Llama-2-70b-chat-hf (推荐) 7 llama3-8b √ https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 8 llama3-70b √ https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct 9 yi-6b √ https://huggingface.co/01-ai/Yi-6B-Chat 10 yi-9b √ https://huggingface.co/01-ai/Yi-9B 11 yi-34b √ https://huggingface.co/01-ai/Yi-34B-Chat 12 deepseek-llm-7b √ https://huggingface.co/deepseek-ai/deepseek-llm-7b-chat 13 deepseek-coder-instruct-33b √ https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct 14 deepseek-llm-67b √ https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat 15 qwen-7b √ https://huggingface.co/Qwen/Qwen-7B-Chat 16 qwen-14b √ https://huggingface.co/Qwen/Qwen-14B-Chat 17 qwen-72b √ https://huggingface.co/Qwen/Qwen-72B-Chat 18 qwen1.5-0.5b √ https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat 19 qwen1.5-7b √ https://huggingface.co/Qwen/Qwen1.5-7B-Chat 20 qwen1.5-1.8b √ https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat 21 qwen1.5-14b √ https://huggingface.co/Qwen/Qwen1.5-14B-Chat 22 qwen1.5-32b √ https://huggingface.co/Qwen/Qwen1.5-32B/tree/main 23 qwen1.5-72b √ https://huggingface.co/Qwen/Qwen1.5-72B-Chat 24 qwen1.5-110b √ https://huggingface.co/Qwen/Qwen1.5-110B-Chat 25 baichuan2-7b √ https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat 26 baichuan2-13b √ https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat 27 chatglm2-6b √ https://huggingface.co/THUDM/chatglm2-6b 28 chatglm3-6b √ https://huggingface.co/THUDM/chatglm3-6b 29 gemma-2b √ https://huggingface.co/google/gemma-2b 30 gemma-7b √ https://huggingface.co/google/gemma-7b 31 mistral-7b √ https://huggingface.co/mistralai/Mistral-7B-v0.1
  • 资源规格要求 本文档中的模型运行环境是ModelArts Lite的DevServer。推荐使用“西南-贵阳一”Region上的资源和Ascend Snt9B。 如果使用DevServer资源,请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。
  • 软件配套版本 本方案支持的软件配套版本和依赖包获取地址如表1所示。 表1 软件配套版本和获取地址 软件名称 说明 下载地址 AscendCloud-3rdLLM-6.3.905-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的vLLM 0.3.2推理部署代码和推理评测代码。代码包具体说明请参见模型软件包结构说明。 6.3.905版本获取路径:Support-E(推荐) 说明: 如果没有下载权限,请联系您所在企业的华为方技术支持下载获取。 AscendCloud-OPP-6.3.905-xxx.zip 推理依赖的算子包。
  • 镜像版本 本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。 表2 基础容器镜像地址 配套软件版本 镜像用途 镜像地址 Cann版本 6.3.905版本 基础镜像 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc2-py_3.9-hce_2.0.2312-aarch64-snt9b-20240528150158-b521cc0 cann_8.0.rc2 不同软件版本对应的基础镜像地址不同,请严格按照软件版本和镜像配套关系获取基础镜像。