调试方法
vLLM-MindSpore插件支持使用mindspore.Profiler
模块,跟踪vLLM-MindSpore插件中worker的性能。用户可以根据采集profiling数据章节,在完成数据采集后,根据分析profiling数据,进行数据分析。另一方面,用户可以根据图数据dump,查看模型的IR图,从而进行对模型结构的分析与调试。
采集profiling数据
用户开启profiling数据的采集,需要将VLLM_TORCH_PROFILER_DIR
环境变量,设置为跟踪结果的保存目录,来开启跟踪功能。如果多机推理,在组网前每台机器都需要设置该变量:
export VLLM_TORCH_PROFILER_DIR=/path/to/save/vllm_profile
设置完成后,以Qwen2.5-32B 为例,启动vLLM-MindSpore插件服务:
export TENSOR_PARALLEL_SIZE=4
export MAX_MODEL_LEN=1024
python3 -m vllm_mindspore.entrypoints vllm.entrypoints.openai.api_server --model "Qwen/Qwen2.5-32B-Instruct" --trust_remote_code --tensor-parallel-size $TENSOR_PARALLEL_SIZE --max-model-len $MAX_MODEL_LEN
若服务成功拉起,则可以获得类似的执行结果,且可以从中看到监听start_profile
和stop_profile
请求:
INFO 05-15 12:03:07 [launcher.py:31] Route: /start_profile, Methods: POST
INFO 05-15 12:03:07 [launcher.py:31] Route: /stop_profile, Methods: POST
INFO: Started server process [212135]
INFO: Waiting for application startup.
INFO: Application startup complete.
在服务成功启动后,用户可通过以下命令,发送请求,执行一次profiling采集:
# Request for starting profiling
curl -X POST http://127.0.0.1:8000/start_profile
# Request for inference
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-32B-Instruct",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'
# Request for stopping profiling
curl -X POST http://127.0.0.1:8000/stop_profile
当日志中有类似的内容,则说明一个worker上的profiling数据采集完毕:
Parsing: [####################] 3/3 Done
分析profiling数据
VLLM_TORCH_PROFILER_DIR
指向的目录保存profiling结果,该目录下存在多个以ascend_ms
为后缀结尾的子目录夹。一个子文件夹保存了一个worker的profiling结果。子文件夹中各文件作用可参考Ascend性能调优。
用户可选择一个子文件夹进行一个worker的性能分析:
op_statistic.csv
:算子总体数据。kernel_details.csv
:算子每次执行数据。trace_view.json
:系统总体执行。该文件可拖动至Perfetto页面,可视化查看系统总体执行情况。网页左侧侧边栏点击某个进程,可以查看该进程下所有线程中记录的trace事件信息:其中,打开MindSpore进程详细信息,可看到图执行中算子下发的情况,执行算子下发任务:
打开Ascend进程详细信息,可看到昇腾算子的实际执行情况,这里面的算子可以与MindSpore进程中下发的算子对应:
图数据dump
参考MindSpore dump功能文档,首先设置json配置文件,然后设置MINDSPORE_DUMP_CONFIG
环境变量指向该配置文件的绝对路径,在推理结束可获取图数据。
dump结果包含了IR图,另外在json配置中对dump_mode
做相应设置,选择dump所有算子或某些算子的执行数据。