模型加载
在day2, 我们尝试了对于llama8B进行转换和推理,可惜最后因为OOM而失败,在day4,我们详细的过了一遍tinyllama的推理,值得注意的是,这两个模型的推理走的是不同的流程。llama8b需要显式的进行模型的转换,引擎的生成,而tinyllama则进行了隐式的执行。
如果参考[1],也有明确的说明。目前模型的推理确实支持多种形式。
量化及调参
接下里,我们的关注点来到: 如何进行各种量化方法的调用,在[2]中提供了对应的实例/。
可以看到的是,他是在LLM的加载和隐式的转换过程中,执行的量化。
llm = LLM(
model="TinyLlama/TinyLlama-1.1B-Chat-v1.0",
# define the quantization config to trigger built-in end-to-end quantization.
quant_config=quant_config)
而在生成结果的过程中,还涉及到很多参数,但这些参数,就与模型的engine无关,而更像是“调参”,在推理的时候指定即可。如下
# Create a sampling params.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
for output in llm.generate(prompts, sampling_params):
print(
f"Prompt: {output.prompt!r}, Generated text: {output.outputs[0].text!r}"
)
显存占用
对于LLM来说,显存的有效利用是一个非常务实的话题,在文档[3]中提到了,模型权重,激活值和I/O tensor会占用显存大小,这里的I/O tensor概念感觉很很隐晦,按我的理解,这是通过一个类似page的形式,进行显存管理?其中,也包含了kv cache,.
另外,文档中还提到了memory pool, 这个的概念,我也不太理解其对应的实现。
今天就先到这吧。
[1] LLM Examples Introduction — tensorrt_llm documentation
[2] LLM Quantization — tensorrt_llm documentation
[3] Memory Usage of TensorRT-LLM — tensorrt_llm documentation