NVIDIA / TensorRT-LLM

TensorRT-LLM provides users with an easy-to-use Python API to define Large Language Models (LLMs) and build TensorRT engines that contain state-of-the-art optimizations to perform inference efficiently on NVIDIA GPUs. TensorRT-LLM also contains components to create Python and C++ runtimes that execute those TensorRT engines.
https://nvidia.github.io/TensorRT-LLM
Apache License 2.0
7.4k stars 800 forks source link

Yi6B model got bad results when i use int8_kv_cache #889

Open littletomatodonkey opened 5 months ago

littletomatodonkey commented 5 months ago

Hi, when i set int8_kv_cache as True, the model results is much worse than W8.

Can you help to have a look?

W8 + fp16 kv cache

python3 build.py --model_dir ${hf_model_dir} \
--dtype float16 \
--remove_input_padding \
--use_gpt_attention_plugin float16 \
--enable_context_fmha \
--use_gemm_plugin float16 \
--output_dir ${trt_model_dir} \
--max_batch_size 64 \
--max_input_len 4096 \
--max_output_len 2048 \
--use_weight_only 
prompt="给我介绍一下北京"

input_text="<|im_start|>system
You are a helpful assistant<|im_end|>
<|im_start|>user
${prompt}<|im_end|>
<|im_start|>assistant
"

python3 ../run.py \
--max_output_len=512 \
--tokenizer_dir ${hf_model_dir} \
--engine_dir=${trt_model_dir} \
--input_text="${input_text}" \
--temperature=0.3 \
--top_p=0.9 \
--top_k=40 \
--repetition_penalty=1.1
Input [Text 0]: "<|im_start|> system
You are a helpful assistant<|im_end|> 
<|im_start|> user
给我介绍一下北京<|im_end|> 
<|im_start|> assistant
"
Output [Text 0 Beam 0]: "北京,中国的首都,位于华北平原北部,是中国的政治、文化、国际交往中心。北京历史悠久,拥有丰富的文化遗产和古迹,如故宫(The Forbidden City)、天安门广场、长城等,这些都吸引了众多国内外游客前来参观。北京也是现代化的国际大都市,拥有发达的交通网络、高耸入云的摩天大楼以及各种现代化设施。此外,北京还有多所著名高校和科研机构,是中国的教育中心之一。"

W8 + int8 kv cache

python3 build.py --model_dir ${hf_model_dir} \
--dtype float16 \
--remove_input_padding \
--use_gpt_attention_plugin float16 \
--enable_context_fmha \
--use_gemm_plugin float16 \
--output_dir ${trt_model_dir} \
--max_batch_size 64 \
--max_input_len 4096 \
--max_output_len 2048 \
--int8_kv_cache \
--use_weight_only 
Input [Text 0]: "<|im_start|> system
You are a helpful assistant<|im_end|> 
<|im_start|> user
给我介绍一下北京<|im_end|> 
<|im_start|> assistant
"
Output [Text 0 Beam 0]: "北京金­—-上_lei ngâ; 以,。。
....................</s> 2,By the,"
byshiue commented 5 months ago

int8 kv cache requires scales and passed by --bin_model_dir. It looks you don't pass the scales in your building scripts and the bad performance should be expected.

littletomatodonkey commented 5 months ago

Thanks for your reply, i export bin files using hf_llama_convert.py, fix the dataset as follows ( to be consistent with the model input template).

The model output is also not good.

Input [Text 0]: "<|im_start|> system
You are a helpful assistant<|im_end|> 
<|im_start|> user
给我介绍一下北京<|im_end|> 
<|im_start|> assistant
"
Output [Text 0 Beam 0]: "北京友,"

The dataset calibration is as follows. (in smoothquant.py)

    lines = open("calib.txt", "r").readlines()
    num_samples = len(lines)
    for i in tqdm(range(num_samples), desc="calibrating model"):
        line = lines[i].strip("\n")
        line = f"<|im_start|>system\nYou are a helpful assistant<|im_end|>\n<|im_start|>user\n{line}<|im_end|>\n<|im_start|>assistant"
        input_ids = tokenizer(line,
                              return_tensors="pt",
                              max_length=seq_len,
                              padding=True,
                              truncation=True).input_ids.to(device)
        model(input_ids)

The calib.txt is as follows.

给我介绍一下北京
你认为什么是成功的关键因素,以及你是如何定义成功的?
在当前的社会环境下,你觉得人们更注重物质生活还是精神层面的满足?
对于全球气候变化问题,你认为个人在日常生活中应该承担怎样的责任?
在职业发展中,你是更倾向于追求稳定与安全,还是追求创新与挑战?
人与人之间的沟通中,你认为语言表达重要还是非语言沟通重要?
在面对压力和挑战时,你是选择坚持到底还是寻找更灵活的解决方案?
对于教育体系的改革,你认为应该注重培养学生的创新能力还是传统基础知识?
你怎样平衡工作与生活,以确保自己在各个方面都能够取得进步?
在社交媒体时代,个人隐私问题备受关注,你对于保护个人隐私有怎样的看法?
在跨文化交流中,你认为理解和尊重差异比一切都重要吗?
对于人工智能的发展,你担心其可能带来的道德和伦理问题吗?
在选择朋友时,你更注重共同兴趣还是相似的价值观?
你认为自己在团队合作中更擅长发挥领导力还是执行力?
对于工作中的失败和挫折,你是选择深陷其中还是尽快从中恢复过来?
在追求个人目标的过程中,你是更注重过程还是结果?
在社会责任方面,你认为企业应该更加注重环保还是社会公益?
对于数字化时代的教育,你认为传统教育模式需要怎样的改革?
在处理冲突和分歧时,你更倾向于通过对话协商还是采取坚定立场?
在人际关系中,你是更喜欢保持独立性还是追求深厚的亲密关系?
对于个人成长,你认为自学和课堂教育哪个更为重要?
在科技不断发展的今天,你认为人类社会会面临怎样的挑战?
你认为全球化对于文化多样性是促进还是侵蚀?
对于工作中的变革和创新,你是更愿意拥抱还是持保守态度?
在社会交往中,你认为个体责任比集体责任更重要吗?
在追求幸福的过程中,你认为金钱和内心满足哪个更为重要?
对于未来职业发展的规划,你更看重专业技能还是综合素养?
在处理紧急问题时,你更喜欢迅速行动还是深思熟虑?
对于社交网络中的虚拟身份,你认为其真实性对于个人关系有何影响?
在面对困境和逆境时,你是选择独自应对还是寻求他人的支持?
你对于自己的职业生涯有明确的规划,还是更倾向于灵活应对变化?
在技术发展对就业市场的冲击下,你认为终身学习的重要性有何体会?
在社会中,你认为个体权利和社会规范应该如何平衡?
你对于未来社会的环境可持续性有怎样的期望和担忧?
对于政治参与,你认为个人的言论和行动能够对社会产生多大影响?
在处理工作和生活压力时,你是更倾向于寻求心理辅导还是自我调节?
在团队合作中,你认为有效沟通比领导能力更为重要吗?
对于人生的意义和价值观,你认为个人选择比社会期望更为重要?
在社会竞争激烈的环境下,你是选择追求个人利益还是合作共赢?
对于工作与家庭的平衡,你认为男女在社会责任中应该承担怎样的角色?
在面对自己的缺点和不足时,你更倾向于接受还是努力改善?
在选择休闲娱乐方式时,你更倾向于文化艺术还是体育活动?
对于社会不平等问题,你认为个体行动能够对体制产生多大改变?
在职场竞争中,你认为个人能力比人际关系更为关键吗?
对于科技对人类生活方式的改变,你是持乐观态度还是担忧未来?
在处理复杂问题时,你是更喜欢分析细节还是关注整体大局?
你认为个人信仰和宗教在塑造人性道德中的作用有多大?
在处理失败和挫折时,你是更愿意自我反省还是寻求外部帮助?
对于社会关注的热点问题,你更倾向于持中立立场还是明确表态?
在追求梦想和目标时,你认为坚持原则还是灵活变通更为重要?
你认为良好的教育体系应该注重培养学生的创造力还是执行力?
Tracin commented 5 months ago

What if using FP16 weights? I mean FP16 weights + FP16 kv and FP16 weights and INT8 kv. TRTLLM now quantize kv cache in per-tensor mode. It actually not so good in accuracy.

littletomatodonkey commented 5 months ago

@Tracin for fp16 weight and fp16 kv cache, the results is (Here the max output length is set as 16 for simplification)

Input [Text 1]: "<|im_start|> system
You are a helpful assistant<|im_end|> 
<|im_start|> user
给我介绍一下北京<|im_end|> 
<|im_start|> assistant
"
Output [Text 1 Beam 0]: "北京,中国的首都,位于华北平原的北部,是中国的政治、经济"

for fp16 weight and int8 kv cache, the results is

Input [Text 1]: "<|im_start|> system
You are a helpful assistant<|im_end|> 
<|im_start|> user
给我介绍一下北京<|im_end|> 
<|im_start|> assistant
"
Output [Text 1 Beam 0]: "北京百度, ....."

It seems that int8 kv cache accuracy is low even for fp16 weights.

Tracin commented 5 months ago

Yeah, that actually makes sense since TRT-LLM now quantize kv_cache in per-tensor mode.