LoRA 模型基准测试#
参数高效微调 (PEFT) 方法可以高效地微调大型预训练模型。NIM 目前支持低秩自适应 (LoRA),这是一种简单有效的方法,可以为特定领域和用例定制 LLM。借助 NIM,用户可以加载和部署多个 LoRA 适配器。请按照参数高效微调部分中的说明,在目录中加载 HuggingFace 或 Nemo 训练的适配器,并将该目录作为环境变量的值传递给 NIM。
添加适配器后,您可以像查询基础模型一样查询 LoRA 模型,只需将基础模型 ID 替换为 LoRA 模型名称,如下例所示。
curl -X 'POST' \
'http://0.0.0.0:8000/v1/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "llama3-8b-instruct-lora_vhf-math-v1",
"prompt": "John buys 10 packs of magic cards. Each pack has 20 cards and 1/4 of those cards are uncommon. How many uncommon cards did he get?",
"max_tokens": 128
}'
借助 GenAI-perf,您可以使用 “-m” 参数传递 LoRA 模型的 ID 来基准测试 LoRA 模型的部署指标,如下例所示。
以下示例将基准测试两个 LoRA 模型,前提是您已按照[参数高效微调](http://docs.nvda.net.cn/nim/large-language-models/latest/peft.html) 中的说明部署了 llama3-8b-instruct-lora_vnemo-math-v1 和 llama3-8b-instruct-lora_vhf-math-v1。此外,“–model-selection-strategy {round_robin,random}” 指定应以轮询方式还是随机方式调用这些适配器。
genai-perf \
-m llama3-8b-instruct-lora_vnemo-math-v1 llama3-8b-instruct-lora_vhf-math-v1 \
--model-selection-strategy random \
--endpoint-type completions \
--service-kind openai \
--streaming \
多 LoRA 部署性能基准测试的最佳实践#
评估这种多 LoRA 部署的延迟和吞吐量性能并非易事。本节介绍基准测试 LLM LoRA 推理框架性能时的几个因素。
基础模型:小型和大型模型,例如 [Llama 3 8B](https://build.nvidia.com/meta/llama3-8b) 和 [Llama 3 70B](https://build.nvidia.com/meta/llama3-70b),分别可以用作 LoRA 微调和推理的基础模型。较小的模型擅长许多任务,尤其是传统的非生成式 NLP 任务,例如文本分类,而较大的模型则擅长复杂的推理任务。LoRA 的优势之一是,即使是大型 70B 模型也可以在单个 [NVIDIA DGX H100](https://www.nvidia.com/en-us/data-center/dgx-h100/) 或 A100 节点上使用 FP16 进行调优,甚至可以使用单个 [NVIDIA H100](https://www.nvidia.com/en-us/data-center/h100/) 或 [NVIDIA A100](https://www.nvidia.com/en-us/data-center/a100/) GPU 进行 4 位量化。
适配器:用户通常倾向于灵活地试验和选择产生最佳精度的尺寸。另一方面,系统操作员可能更喜欢强制使用固定尺寸,因为统一的 LoRA 可以实现更好的批处理和性能。LoRA 秩的常见选择是 8、16、32 和 64。
测试参数:基准测试需要考虑的其他几个测试参数包括以下内容
输出长度控制:ignore_eos 参数指示推理框架继续生成文本,直到达到 max_token_length 限制。这确保满足用例 OSL(输出序列长度)规范。LLM 推理框架越来越多地支持此参数,并大大简化了基准测试的设置。值得注意的是,使用 ignore_eos,您无需针对真实任务进行训练即可执行性能分析。
系统负载:并发(并发用户数)通常用于将负载驱动到系统中。此参数值应反映实际用例,同时还要考虑系统可以有效并发服务的最大批处理大小。对于单个 GPU 上的 8B 模型,请考虑最多 250 个并发用户作为实际服务器负载。
任务类型:您应该考虑生成式和非生成式任务。这些任务在 ISL(输入序列长度)和 OSL 方面有所不同。200 到 2000 个令牌范围内的 ISL 和 1 到 2000 个令牌范围内的 OSL 反映了广泛的 LLM 应用:从文本分类和摘要到翻译和代码生成。