开源工具评估大语言模型API性能
LLMPerf是一个评估大语言模型API性能的开源工具。它通过负载测试和正确性测试来衡量模型的响应延迟、生成吞吐量和输出准确性。该工具支持OpenAI、Anthropic、TogetherAI等主流LLM API,并可扩展适配新API。LLMPerf采用Ray框架处理并发请求,能够模拟实际负载环境。开发者和研究人员可利用LLMPerf便捷地评估和对比不同LLM API的性能表现。
一个用于评估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脚本。
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 '{}'
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 '{}'
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 '{}'
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 '{}'
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 '{}'
这里,--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不返回其端点生成的总词元数,因此使用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脚本。
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"
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"
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" \
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" \
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
。
这里,--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不返回其端点生成的令牌总数,因此使用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客户端,您需要实现基类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仓库中找到。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流 程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文 件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速 完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。