附录:大模型推理常见问题
问题1:在推理预测过程中遇到NPU out of memory
解决方法:调整推理服务启动时的显存利用率,将--gpu-memory-utilization的值调小。
问题2:在推理预测过程中遇到ValueError:User-specified max_model_len is greater than the drived max_model_len
解决方法:
修改config.json文件中的"seq_length"的值,"seq_length"需要大于等于 --max-model-len的值。config.json存在模型对应的路径下,例如:/data/nfs/benchmark/tokenizer/chatglm3-6b/config.json
问题3:使用llama3.1系列模型进行推理时报错
使用llama3.1系模型进行推理时报错:ValueError: 'rope_scaling' must be a dictionary with two fields, 'type' and 'factor', got {'factor': 8.0, 'low_freq_factor': 1.0, 'high_freq_factor': 4.0, 'original_max_position_embeddings': 8192, 'rope_type': 'llama3'}
解决方法:
升级transformers版本到4.43.1
pip install transformers --upgrade
问题4:使用SmoothQuant进行W8A8进行模型量化时报错
使用SmoothQuant进行W8A8进行模型量化时报错:AttributeError: type object 'LlamaAttention' has no attribute '_init_rope'
解决方法:降低transformers版本到4.42
pip install transformers==4.42 --upgrade
问题5:使用AWQ转换llama3.1系列模型权重出现报错
使用AWQ转换llama3.1系列模型权重出现报错:ValueError: 'rope_scaling' must be a dictionary with two fields, 'type' and 'factor'
解决方法:
该问题通过将transformers升级到4.44.0,修改对应transformers中的transformers/models/llama/modeling_llama.py,在class LlamaRotaryEmbedding中的forward函数中增加self.inv_freq = self.inv_freq.npu()
问题6:使用Qwen2-7B、Qwen2-72B模型有精度问题,重复输出感叹号
检查步骤六中4. 配置环境变量章节中,高精度模式的环境变量是否开启。
问题7:使用autoAWQ进行qwen-7b模型量化时报错
使用autoAWQ进行qwen-7b模型量化时报错:TypeError: 'NoneType' object is not subscriptable
解决方法:
修改qwen-7b权重路径下modeling_qwen.py第39行为SUPPORT_FP16 = True
问题8:使用benchmark-tools对GLM系列模型进行性能测试报错
使用benchmark-tools对GLM系列模型进行性能测试报错TypeError: _pad() got an unexpected keyword argument 'padding_side'
解决方法:
1、下载最新的tokenization_chatglm.py,替换原来权重里的tokenization_chatglm.py。
https://huggingface.co/THUDM/glm-4-9b-chat/blob/main/tokenization_chatglm.py
https://huggingface.co/THUDM/chatglm3-6b/blob/main/tokenization_chatglm.py
或者2、修改tokenization_chatglm.py,在266行增加padding_side: str = "left",如图1所示。
问题9:使用benchmark-tools访问推理服务返回报错
使用benchmark-tools访问推理服务时,输入输出的token和大于max_model_len,服务端返回报错Response payload is not completed,见图2。
再次设置输入输出的token和小于max_model_len访问推理服务,服务端响应200,见图3。
客户端仍返回报错Response payload is not completed,见图4。
解决方法:
安装brotlipy后返回正确报错
pip install brotlipy
问题10:使用benchmark-tools访问推理客户端返回报错或警告
使用benchmark-tools访问推理客户端返回报错或警告:actual output_tokens_length < expected output_len
解决方法:
减少参数--prompt-tokens和--output-tokens的值,或者增大启动服务的参数--max-model-len的值。
问题11:使用离线推理时,性能较差或精度异常
解决方法:将block_size大小设置为128
from vllm import LLM, SamplingParams llm = LLM(model="facebook/opt-125m", block_size=128)
问题12:使用SmoothQuant做权重转换时,scale显示为nan或推理时精度异常
涉及模型:qwen2-1.5b, qwen2-7b
解决方法:修改AscendCloud/AscendCloud-LLM/llm_tools/AutoSmoothQuant/autosmoothquant/utils/utils.py中的build_model_and_tokenizer函数,将torch_dtype类型从torch.float16改成torch.bfloat16
kwargs = {"torch_dtype": torch.bfloat16, "device_map": "auto"}
问题13:使用SmoothQuant做权重转换时报错
涉及模型:qwen2-1.5b, qwen2-0.5b
解决方法:修改AscendCloud/AscendCloud-LLM/llm_tools/AutoSmoothQuant/autosmoothquant/examples/smoothquant_model.py中的main函数,保存模型时将safe_serialization指定为False
int8_model.save_pretrained(output_path,safe_serialization=False)