跳转到内容

模型

模型

模型是在FreeEval中被评估的语言模型。该框架通过统一接口支持不同类型的模型,允许您使用相同的评估方法比较各种模型架构和实现。

模型类型

FreeEval支持三种主要类型的模型,以适应不同的部署场景和资源限制:

远程Hugging Face模型 (remote_hf)

FreeEval中的远程Hugging Face模型可以通过两种方式访问:

  1. 通过Hugging Face推理API:直接从Hugging Face的API服务访问托管模型
  2. 通过文本生成推理(TGI):在您自己的基础设施上将模型部署为HTTP服务

第二种方法使用Hugging Face的Text Generation Inference包,这是一个专为大型语言模型优化的高性能服务解决方案。这为您提供了几个优势:

  • 工业级性能,优化的GPU利用率
  • 支持跨多个GPU的模型分片
  • 高级功能,如连续批处理和令牌流式传输
  • 与Hugging Face托管服务兼容的一致API接口

FreeEval提供了一个便捷脚本(deploy_model.py),帮助您使用TGI通过单个命令部署模型。例如:

Terminal window
python deploy_model.py --model meta-llama/Llama-2-7b-chat-hf --data-path /path/to/models --gpus 0,1 --port 8080

此命令部署Llama-2-7b-chat模型,在GPU 0和1上分片,并使其作为HTTP服务在端口8080上可用。

FreeEval还支持跨多个模型实例的负载均衡,允许您在多台机器上分配评估工作负载,以获得更好的性能和可扩展性。

本地Hugging Face模型 (local_hf)

本地Hugging Face模型直接在您的Python进程中运行,使您对执行环境拥有完全控制。这种方法在以下情况下有益:

  • 您需要没有HTTP开销的直接集成
  • 您正在使用通过API不可用的专有或修改过的模型
  • 您需要离线评估能力
  • 您想要微调评估参数,如精度或批处理大小

本地模型需要适当的硬件(通常是GPU)并可能需要额外设置以确保最佳性能。FreeEval提供配置选项来自定义模型的加载和执行方式,允许您根据硬件能力平衡性能和资源使用。

OpenAI模型 (openai)

OpenAI模型通过OpenAI API访问,提供对GPT-3.5、GPT-4和OpenAI的其他产品的访问。此选项允许您:

  • 评估最先进的商业模型
  • 建立性能基准以与其他模型比较
  • 访问可能不公开用于本地部署的模型
  • 与现有的基于OpenAI的应用集成

使用OpenAI模型需要API密钥,并遵循OpenAI的使用政策和定价结构。FreeEval管理API通信,适当格式化请求并解析响应以适应评估框架。

模型配置

每种模型类型都有特定的配置参数,控制其在评估期间的行为:

对于远程Hugging Face模型,您可以指定:

  • 模型端点URL
  • 认证详情
  • 生成参数(温度、最大令牌数等)
  • 多个端点的负载均衡配置

对于本地Hugging Face模型,您可以指定:

  • 模型标识符或路径
  • 设备映射(使用哪些GPU)
  • 精度设置(float16、int8等)
  • 自定义提示模板
  • 缓存行为

对于OpenAI模型,您可以配置:

  • 模型版本(如gpt-3.5-turbo、gpt-4)
  • API参数(温度、存在惩罚等)
  • 响应格式化
  • 认证详情

配置系统允许您根据评估需求微调模型行为,确保不同模型之间的公平比较,同时考虑其独特特性。

使用文本生成推理部署模型

为了便于高性能模型部署,FreeEval包含一个使用Hugging Face的文本生成推理(TGI)部署模型的实用脚本。对于涉及开源模型的大多数评估场景,推荐使用这种方法,因为它提供卓越的性能和灵活性。

deploy_model.py脚本为您处理Docker设置和配置:

Terminal window
python deploy_model.py --model /data --data-path /path/to/your/models --gpus 0,1,2,3 --port 8080 --follow-logs

关键参数包括:

  • --model:模型ID或路径(对于数据路径中的模型使用/data
  • --data-path:存储模型权重的目录
  • --gpus:要使用的GPU设备的逗号分隔列表
  • --port:公开HTTP服务的端口
  • --follow-logs:(可选)部署后显示日志

部署后,您可以通过在模型配置中指定此端点来配置FreeEval使用它:

"models": {
"llama2-7b": {
"type": "remote_hf",
"url": "http://localhost:8080"
}
}

对于生产环境或大规模评估,您可以在不同机器上部署多个实例,并使用FreeEval的负载均衡功能有效地分配工作负载。

为评估选择模型

在设计FreeEval评估时,考虑哪些模型将为您的用例提供最有意义的见解。您可能包括:

  • 最先进的模型,建立性能上限
  • 专有模型的开源替代品
  • 同一模型架构的不同版本,测量改进情况
  • 具有不同参数数量的模型,评估规模效应
  • 为您感兴趣的领域训练的专业模型

通过使用相同的数据集和步骤评估多个模型,您可以获得比较见解,帮助为您的应用或研究问题决策模型选择。

模型输出和分析

FreeEval标准化不同模型类型的输出,无论底层实现如何,都允许统一分析。该框架捕获生成的响应和额外元数据,如计时信息、标记使用和特定于模型的指标。

这种标准化使不同模型类型之间的直接比较成为可能,帮助您了解它们在各种评估维度上的相对优势和劣势。结果可以指导关于在生产中使用哪些模型或为未来发展优先考虑哪些研究方向的决策。

配置示例

以下是FreeEval支持的不同模型类型的配置示例。这些示例展示了FreeEval配置文件的inference_config部分。

本地Hugging Face模型

"inference_config": {
"type": "local_hf", // 指定本地Hugging Face模型
"output_path": "./outputs", // 保存评估结果的路径
"inference_kwargs": {
"model_path": "./models/llama2-7b-chat", // 模型权重的本地路径
"generation_config": { // 文本生成配置
"stop_sequences": ["A", "B", "C", "D", "E"],
"max_new_tokens": 2048,
"temperature": 0.0 // 0.0表示确定性输出
},
"device": "cuda", // 运行推理的设备
"num_gpus_per_model": 1, // 用于模型并行的GPU数量
"num_gpus_total": 4, // 可用的总GPU数量
"max_gpu_memory": null, // GPU内存限制(null = 无限制)
"trial_run": false, // 设为true可使用小样本进行测试
"dump_individual_rsp": true // 保存单独的模型响应
}
}

远程Hugging Face模型

"inference_config": {
"type": "remote_hf", // 指定远程Hugging Face模型
"output_path": "./outputs", // 保存评估结果的路径
"inference_kwargs": {
"model_name": "llama-2-7b-chat-hf", // 模型标识符
"base_url": ["http://your-tgi-url"], // 文本生成推理API URL
"timeout": 10, // 请求超时时间(秒)
"generation_config": { // 文本生成配置
"stop_sequences": ["A", "B", "C", "D", "E"],
"max_new_tokens": 2048,
"temperature": 0.0 // 0.0表示确定性输出
},
"num_workers": 32, // 并行工作线程数量
"request_limit": 100000, // API请求速率限制
"request_limit_period": 60, // 速率限制周期(秒)
"trial_run": false, // 设为true可使用小样本进行测试
"dump_individual_rsp": true // 保存单独的模型响应
}
}

OpenAI API模型

"inference_config": {
"type": "openai", // 指定OpenAI模型
"output_path": "./outputs", // 保存评估结果的路径
"inference_kwargs": {
"openai_model": "gpt-4-1106-preview", // OpenAI模型标识符
"openai_key": "your-openai-key", // 用于认证的API密钥
"openai_api_base": "https://api.openai.com/v1", // API端点URL
"openai_proxy": "", // 可选代理URL(留空表示无代理)
"openai_timeout": 120.0, // 请求超时时间(秒)
"generation_config": { // 文本生成配置
"max_tokens": 400, // 生成的最大标记数
"n": 1, // 生成的完成数量
"temperature": 0.0, // 0.0表示确定性输出
"seed": 0 // 确定性采样的种子
},
"num_workers": 16, // 并行工作线程数量
"request_limit": 100000, // API请求速率限制
"request_limit_period": 60, // 速率限制周期(秒)
"dump_individual_rsp": true // 保存单独的模型响应
}
}

您选择的配置取决于您的评估需求和可用资源。本地模型提供更多控制权,成本效益更高,但需要足够的硬件。远程和API模型在不需要本地硬件资源的情况下提供灵活性,但可能会产生使用成本。