长序列定义为序列长度超过32K甚至可到达1M级别的文本。长序列特性的主要要求是在输入文本超长的场景下,模型回答的效果及性能也可以同时得到保障。在长序列场景下,由Attention和KV Cache部分造成的显存消耗会快速的成倍增长。因此对这部分显存的优化便是长序列特性的关键技术点。其中涉及到诸如KV Cache量化,kv多头压缩,训短推长等关键算法技术。
请兼顾硬件规格、模型参数及模型支持的最大有效推理长度来确定合适的序列长度,具体规格请参考对应模型的官方介绍文档。相较于普通推理,部分支持长序列特性的模型需要修改配置文件来支持长序列特性。以Qwen2-72B-Instruct为例,使能长序列特性需要修改其权重文件中的“config.json”,增加“rope_scaling”字段(若不需要使能长序列特性,请勿添加):
{ "architectures": [ "Qwen2ForCausalLM" ], // ... "vocab_size": 152064, // adding the following snippets "rope_scaling": { "factor": 4.0, "original_max_position_embeddings": 32768, "type": "yarn" } }
不同模型使能长序列特性的方式可能不同,部分模型(例如LLaMA3.1-70B-Instruct)不需要修改也可使能长序列特性。请参考各支持长序列特性模型的README(路径请参考Readme文档解读),获取使能长序列特性的具体方法。
使能长序列特性后,仅需要将长序列文本按照正常推理流程传入模型即可完成长序列推理。详细的执行模型推理的流程请参考模型推理使用流程获取更多信息和支持。
添加完长序列特性配置后,可正常执行推理。可自定义设置输入文本长度,如大于“original_max_position_embeddings”的值时,可进行长序列推理。具体推理执行方式可参考以下指令:
cd ${ATB_SPEED_HOME_PATH} torchrun --nproc_per_node [运行卡数] --master_port 20030 -m examples.run_pa --model_path [模型权重路径] --max_output_length [最大输出长度] --max_input_length [最大输入长度] --input_texts [输入文本,可支持文件或字符串]
长序列推理建议使用文本文件作为输入,如“*.txt”。