llmperf

llmperf

开源工具评估大语言模型API性能

LLMPerf是一个评估大语言模型API性能的开源工具。它通过负载测试和正确性测试来衡量模型的响应延迟、生成吞吐量和输出准确性。该工具支持OpenAI、Anthropic、TogetherAI等主流LLM API,并可扩展适配新API。LLMPerf采用Ray框架处理并发请求,能够模拟实际负载环境。开发者和研究人员可利用LLMPerf便捷地评估和对比不同LLM API的性能表现。

LLMPerfLLM性能评估API测试RayGithub开源项目

LLMPerf

一个用于评估LLM API性能的工具。

安装

git clone https://github.com/ray-project/llmperf.git cd llmperf pip install -e .

基本用法

我们实现了2个测试来评估LLM:一个负载测试用于检查性能,一个正确性测试用于检查正确性。

负载测试

负载测试会向LLM API发送多个并发请求,并测量每个请求的词元间延迟和生成吞吐量,以及跨并发请求的情况。每个请求发送的提示格式如下:

从以下文本中随机流式输出行。不要生成eos词元:
第1行,
第2行,
第3行,
...

其中的行是从莎士比亚十四行诗集中随机采样的。无论测试哪个LLM API,都使用LlamaTokenizer来计算词元数。这是为了确保不同LLM API之间的提示保持一致。

要运行最基本的负载测试,可以使用token_benchmark_ray脚本。

注意事项和免责声明

  • 端点提供商的后端可能差异很大,因此这并不反映软件在特定硬件上的运行情况。
  • 结果可能随一天中的时间而变化。
  • 结果可能随负载而变化。
  • 结果可能与用户的工作负载不相关。

OpenAI兼容的API

export OPENAI_API_KEY=secret_abcdefg export OPENAI_API_BASE="https://api.endpoints.anyscale.com/v1" python token_benchmark_ray.py \ --model "meta-llama/Llama-2-7b-chat-hf" \ --mean-input-tokens 550 \ --stddev-input-tokens 150 \ --mean-output-tokens 150 \ --stddev-output-tokens 10 \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \ --llm-api openai \ --additional-sampling-params '{}'

Anthropic

export ANTHROPIC_API_KEY=secret_abcdefg python token_benchmark_ray.py \ --model "claude-2" \ --mean-input-tokens 550 \ --stddev-input-tokens 150 \ --mean-output-tokens 150 \ --stddev-output-tokens 10 \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \ --llm-api anthropic \ --additional-sampling-params '{}'

TogetherAI

export TOGETHERAI_API_KEY="YOUR_TOGETHER_KEY" python token_benchmark_ray.py \ --model "together_ai/togethercomputer/CodeLlama-7b-Instruct" \ --mean-input-tokens 550 \ --stddev-input-tokens 150 \ --mean-output-tokens 150 \ --stddev-output-tokens 10 \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \ --llm-api "litellm" \ --additional-sampling-params '{}'

Hugging Face

export HUGGINGFACE_API_KEY="YOUR_HUGGINGFACE_API_KEY" export HUGGINGFACE_API_BASE="YOUR_HUGGINGFACE_API_ENDPOINT" python token_benchmark_ray.py \ --model "huggingface/meta-llama/Llama-2-7b-chat-hf" \ --mean-input-tokens 550 \ --stddev-input-tokens 150 \ --mean-output-tokens 150 \ --stddev-output-tokens 10 \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \ --llm-api "litellm" \ --additional-sampling-params '{}'

LiteLLM

LLMPerf可以使用LiteLLM向LLM API发送提示。要查看为提供商设置的环境变量以及应为模型和additional-sampling-params设置的参数,

请参阅LiteLLM提供商文档

python token_benchmark_ray.py \ --model "meta-llama/Llama-2-7b-chat-hf" \ --mean-input-tokens 550 \ --stddev-input-tokens 150 \ --mean-output-tokens 150 \ --stddev-output-tokens 10 \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \ --llm-api "litellm" \ --additional-sampling-params '{}'

Vertex AI

这里,--model用于日志记录,而不是用于选择模型。模型在Vertex AI端点ID中指定。

GCLOUD_ACCESS_TOKEN需要定期设置,因为由gcloud auth print-access-token生成的令牌大约15分钟后就会过期。

Vertex AI不返回其端点生成的总词元数,因此使用LLama tokenizer来计算词元。

gcloud auth application-default login gcloud config set project YOUR_PROJECT_ID export GCLOUD_ACCESS_TOKEN=$(gcloud auth print-access-token) export GCLOUD_PROJECT_ID=YOUR_PROJECT_ID export GCLOUD_REGION=YOUR_REGION export VERTEXAI_ENDPOINT_ID=YOUR_ENDPOINT_ID python token_benchmark_ray.py \ --model "meta-llama/Llama-2-7b-chat-hf" \ --mean-input-tokens 550 \ --stddev-input-tokens 150 \ --mean-output-tokens 150 \ --stddev-output-tokens 10 \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \ --llm-api "vertexai" \ --additional-sampling-params '{}'

SageMaker

SageMaker不返回其端点生成的总词元数,因此使用LLama tokenizer来计算词元。

export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"s export AWS_SESSION_TOKEN="YOUR_SESSION_TOKEN" export AWS_REGION_NAME="YOUR_ENDPOINTS_REGION_NAME" python llm_correctness.py \ --model "llama-2-7b" \ --llm-api "sagemaker" \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \

有关参数的更多详细信息,请参见python token_benchmark_ray.py --help

正确性测试

正确性测试向LLM API发送多个并发请求,格式如下:

将以下单词序列转换为数字:{random_number_in_word_format}。只输出你的最终答案。

其中random_number_in_word_format可以是例如"一百二十三"。然后测试检查响应是否包含该数字的数字格式,在这种情况下应为123。

测试会对多个随机生成的数字执行此操作,并报告包含不匹配的响应数量。

要运行最基本的正确性测试,您可以运行llm_correctness.py脚本。

OpenAI兼容API

export OPENAI_API_KEY=secret_abcdefg export OPENAI_API_BASE=https://console.endpoints.anyscale.com/m/v1 python llm_correctness.py \ --model "meta-llama/Llama-2-7b-chat-hf" \ --max-num-completed-requests 150 \ --timeout 600 \ --num-concurrent-requests 10 \ --results-dir "result_outputs"

Anthropic

export ANTHROPIC_API_KEY=secret_abcdefg python llm_correctness.py \ --model "claude-2" \ --llm-api "anthropic" \ --max-num-completed-requests 5 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs"

TogetherAI

export TOGETHERAI_API_KEY="YOUR_TOGETHER_KEY" python llm_correctness.py \ --model "together_ai/togethercomputer/CodeLlama-7b-Instruct" \ --llm-api "litellm" \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \

Hugging Face

export HUGGINGFACE_API_KEY="YOUR_HUGGINGFACE_API_KEY" export HUGGINGFACE_API_BASE="YOUR_HUGGINGFACE_API_ENDPOINT" python llm_correctness.py \ --model "huggingface/meta-llama/Llama-2-7b-chat-hf" \ --llm-api "litellm" \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \

LiteLLM

LLMPerf可以使用LiteLLM向LLM API发送提示。要查看要为提供程序设置的环境变量以及应为模型和附加采样参数设置的参数。

请参阅LiteLLM提供程序文档

python llm_correctness.py \ --model "meta-llama/Llama-2-7b-chat-hf" \ --llm-api "litellm" \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \

有关参数的更多详细信息,请参阅python llm_correctness.py --help

Vertex AI

这里,--model用于日志记录,而不是用于选择模型。模型在Vertex AI Endpoint ID中指定。

GCLOUD_ACCESS_TOKEN需要定期设置,因为由gcloud auth print-access-token生成的令牌大约15分钟后就会过期。

Vertex AI不返回其端点生成的令牌总数,因此使用LLama分词器计算令牌。

gcloud auth application-default login gcloud config set project YOUR_PROJECT_ID export GCLOUD_ACCESS_TOKEN=$(gcloud auth print-access-token) export GCLOUD_PROJECT_ID=YOUR_PROJECT_ID export GCLOUD_REGION=YOUR_REGION export VERTEXAI_ENDPOINT_ID=YOUR_ENDPOINT_ID python llm_correctness.py \ --model "meta-llama/Llama-2-7b-chat-hf" \ --llm-api "vertexai" \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \

SageMaker

SageMaker不返回其端点生成的令牌总数,因此使用LLama分词器计算令牌。

export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"s export AWS_SESSION_TOKEN="YOUR_SESSION_TOKEN" export AWS_REGION_NAME="YOUR_ENDPOINTS_REGION_NAME" python llm_correctness.py \ --model "llama-2-7b" \ --llm-api "sagemaker" \ --max-num-completed-requests 2 \ --timeout 600 \ --num-concurrent-requests 1 \ --results-dir "result_outputs" \

保存结果

负载测试和正确性测试的结果保存在由--results-dir参数指定的结果目录中。结果保存在2个文件中,一个包含测试的摘要指标,另一个包含返回的每个单独请求的指标。

高级用法

正确性测试的实现考虑了以下工作流程:

import ray from transformers import LlamaTokenizerFast from llmperf.ray_clients.openai_chat_completions_client import ( OpenAIChatCompletionsClient, ) from llmperf.models import RequestConfig from llmperf.requests_launcher import RequestsLauncher # 复制环境变量并将其传递给ray.init()对于任何客户端的工作都是必要的。 ray.init(runtime_env={"env_vars": {"OPENAI_API_BASE" : "https://api.endpoints.anyscale.com/v1", "OPENAI_API_KEY" : "YOUR_API_KEY"}}) base_prompt = "hello_world" tokenizer = LlamaTokenizerFast.from_pretrained( "hf-internal-testing/llama-tokenizer" ) base_prompt_len = len(tokenizer.encode(base_prompt)) prompt = (base_prompt, base_prompt_len) # 创建用于生成请求的客户端 clients = [OpenAIChatCompletionsClient.remote()] req_launcher = RequestsLauncher(clients) req_config = RequestConfig( model="meta-llama/Llama-2-7b-chat-hf", prompt=prompt ) req_launcher.launch_requests(req_config) result = req_launcher.get_next_ready(block=True) print(result)

实现新的LLM客户端

要实现新的LLM客户端,您需要实现基类llmperf.ray_llm_client.LLMClient并将其装饰为ray actor。

from llmperf.ray_llm_client import LLMClient import ray @ray.remote class CustomLLMClient(LLMClient): def llm_request(self, request_config: RequestConfig) -> Tuple[Metrics, str, RequestConfig]: """向LLM API发出单个完成请求 返回: 关于请求性能特征的指标。 通过向LLM API请求生成的文本。 用于发出请求的request_config。这主要用于日志记录目的。 """ ...

旧代码库

旧的LLMPerf代码库可以在llmperf-legacy仓库中找到。

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具使用教程AI营销产品酷表ChatExcelAI智能客服
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

数据安全AI助手热门AI工具AI辅助写作AI论文工具论文写作智能生成大纲
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

热门AI工具AI办公办公工具智能排版AI生成PPT博思AIPPT海量精品模板AI创作
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多