提示词工程实践(二)——本地开源模型部署 #117

Open
opened 2024-09-23 15:48:50 +08:00 by 12390900721cs · 0 comments

在这里,我们通过在本地部署CodeLlama-7B-HF模型进行提示词工程实践测试。

Code Llama模型

Code Llama 是 Meta AI 推出的一款开源的大语言模型,专门用于代码生成和理解任务。它是在 Llama 2 的基础上进行微调的,旨在为编程相关任务提供支持,能够生成、补全代码,回答编程问题,甚至进行代码调试。Code Llama 支持多种编程语言,包括 Python、C++、JavaScript 等,并可以处理跨语言的代码片段。

Code Llama 有多个版本,根据不同的使用场景提供不同大小的模型。此处我们使用的是适合通用代码生成和理解任务的Code Llama模型。此外,还有专门针对python进行过微调的Code Llama - Python 和专注于遵循自然语言指令进行代码生成的任务,能够更好地根据人类的指令生成符合要求的代码的Code Llama - Instruct模型等。

CodeLlama-7B-HF:7B指的是有70亿个参数,HF指的是经过 Hugging Face 平台格式化的模型版本,因此可以方便地与 Hugging Face 的 Transformers 库进行集成和使用。

使用FastChat部署codellama-7b-hf模型

首先创建四个终端,三个用来部署,一个用来交互。

2.1 启动Controller:

python -m fastchat.serve.controller --host 0.0.0.0

  • Controller是FastChat的中心协调服务,他的作用是管理所有连接的Model Worker,并将API请求分发给它们。它不参与模型推理,而是作为指挥者协调不同的模型计算节点。
  • --host 0.0.0.0 指的是将 Controller 绑定到本机所有网络接口,使其对外界可访问。这里其实也可以通过将其绑定到一个特定IP来限制访问范围。

详细过程:

Controller是整个服务系统的核心组件,它启动后会等待Model Workers和API Server的连接。

2.2 启动Model Worker:

python -m fastchat.serve.model_worker --model-path /dataset/CodeLlama-7b-hf/ --host 0.0.0.0 --num-gpus 4 --max-gpu-memory 15GiB

  • Model Worker 是真正进行推理的工作者节点,它加载 CodeLlama-7B-HF 模型并执行推理任务。每个工作者可以使用多张 GPU,进行分布式计算。
  • --model-path /dataset/CodeLlama-7b-hf/:指定要加载的模型路径。这个路径下包含的是已经下载并配置好的 CodeLlama-7B-HF 模型文件。
  • --host 0.0.0.0:同样表示Model Worker服务将绑定到本机所有网络接口,便于外部访问。
  • --num-gpus 4:表示该工作者将使用 4 张 GPU。通常一个大模型需要使用多张 GPU 来进行分布式推理以提升性能。
  • --max-gpu-memory 15GiB:限制每张 GPU 的最大显存使用量为 15GB。因为不同的 GPU 可能有不同的显存大小,这个参数可以确保不会占用超出 GPU 能力的显存。确保这个值不超过 GPU 的可用显存大小,否则可能导致内存不足的问题。

详细过程:

Model Worker 启动后会尝试加载模型,并连接到 Controller。多个 Worker 可以连接到同一个 Controller,进行负载均衡和并行计算。

每次 API 请求进入后,Controller 会根据不同 Worker 的负载情况,将任务分发给空闲的 Worker 进行处理。

2.3 启动OpenAI API Server:

python -m fastchat.serve.openai_api_server --host 0.0.0.0

  • OpenAI API Server是一个兼容 OpenAI API 接口的服务,外部应用通过这个接口与模型进行交互。它负责接收外部的 API 请求(如通过 HTTP),并将这些请求发送给 Controller,最终转发给合适的 Model Worker 来完成推理
  • --host 0.0.0.0:绑定到所有网络接口,允许外部访问该 API Server。

详细过程:

当外部应用(如使用 OpenAI 官方的 API 客户端)发送请求到 API Server 时,API Server 会将请求转发给 Controller。

Controller 再将请求分配给空闲的 Model Worker,进行实际的模型推理。

推理结果返回到 Controller,Controller 再传回给 API Server,最终 API Server 将结果返回给客户端。

模型调用

curl -X POST http://localhost:8000/v1/completions </font>

-H "Content-Type: application/json"</font>

-d '{

"model": "CodeLlama-7b-hf",

"prompt": "You are a powerful text-to-SQL model. Your job is to answer questions about a database. You are given a question and context regarding one or more tables. You must output the SQL query that answers the question. ### Input: Which Class has a Frequency MHz larger than 91.5, and a City of license of hyannis, nebraska? ### Context: CREATE TABLE table_name_12 (class VARCHAR, frequency_mhz VARCHAR, city_of_license VARCHAR) ### Response:",

"max_tokens": 41,

"temperature": 0.5

}'

预期的 SQL 查询:

根据问题和表结构,预期生成的 SQL 查询结果应类似于:

SELECT class FROM table_name_12 WHERE frequency_mhz > 91.5 AND city_of_license = 'hyannis, nebraska';

实际输出:

然而实际生成结果与其不符,可以看出用原始模型得出的结果并不算好,需要根据需要进行微调。

在这里,我们通过在本地部署CodeLlama-7B-HF模型进行提示词工程实践测试。 ## Code Llama模型 Code Llama 是 Meta AI 推出的一款开源的大语言模型,专门用于代码生成和理解任务。它是在 Llama 2 的基础上进行微调的,旨在为编程相关任务提供支持,能够生成、补全代码,回答编程问题,甚至进行代码调试。Code Llama 支持多种编程语言,包括 Python、C++、JavaScript 等,并可以处理跨语言的代码片段。 Code Llama 有多个版本,根据不同的使用场景提供不同大小的模型。此处我们使用的是适合通用代码生成和理解任务的Code Llama模型。此外,还有专门针对python进行过微调的Code Llama - Python 和专注于遵循自然语言指令进行代码生成的任务,能够更好地根据人类的指令生成符合要求的代码的Code Llama - Instruct模型等。 CodeLlama-7B-HF:7B指的是有70亿个参数,HF指的是经过 Hugging Face 平台格式化的模型版本,因此可以方便地与 Hugging Face 的 Transformers 库进行集成和使用。 ## 使用FastChat部署codellama-7b-hf模型 首先创建四个终端,三个用来部署,一个用来交互。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726815216224-27ce4b56-26d6-45af-b7b6-b0cb5fd852d3.png) 2.1 启动Controller: python -m fastchat.serve.controller --host 0.0.0.0 + Controller是FastChat的中心协调服务,他的作用是管理所有连接的Model Worker,并将API请求分发给它们。它不参与模型推理,而是作为指挥者协调不同的模型计算节点。 + --host 0.0.0.0 指的是将 Controller 绑定到本机所有网络接口,使其对外界可访问。这里其实也可以通过将其绑定到一个特定IP来限制访问范围。 详细过程: Controller是整个服务系统的核心组件,它启动后会等待Model Workers和API Server的连接。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726815176890-eb3fa0d9-9de3-4495-9856-0fc9b4705f46.png) 2.2 启动Model Worker: python -m fastchat.serve.model_worker --model-path /dataset/CodeLlama-7b-hf/ --host 0.0.0.0 --num-gpus 4 --max-gpu-memory 15GiB + Model Worker 是真正进行推理的工作者节点,它加载 CodeLlama-7B-HF 模型并执行推理任务。每个工作者可以使用多张 GPU,进行分布式计算。 + `--model-path /dataset/CodeLlama-7b-hf/`:指定要加载的模型路径。这个路径下包含的是已经下载并配置好的 `CodeLlama-7B-HF` 模型文件。 + `--host 0.0.0.0`:同样表示Model Worker服务将绑定到本机所有网络接口,便于外部访问。 + `--num-gpus 4`:表示该工作者将使用 4 张 GPU。通常一个大模型需要使用多张 GPU 来进行分布式推理以提升性能。 + `--max-gpu-memory 15GiB`:限制每张 GPU 的最大显存使用量为 15GB。因为不同的 GPU 可能有不同的显存大小,这个参数可以确保不会占用超出 GPU 能力的显存。确保这个值不超过 GPU 的可用显存大小,否则可能导致内存不足的问题。 详细过程: Model Worker 启动后会尝试加载模型,并连接到 Controller。多个 Worker 可以连接到同一个 Controller,进行负载均衡和并行计算。 每次 API 请求进入后,Controller 会根据不同 Worker 的负载情况,将任务分发给空闲的 Worker 进行处理。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726815253457-cdbcf76d-5b23-42f9-80dc-267a0e2d95b4.png) 2.3 启动OpenAI API Server: python -m fastchat.serve.openai_api_server --host 0.0.0.0 + OpenAI API Server是一个兼容 OpenAI API 接口的服务,外部应用通过这个接口与模型进行交互。它负责接收外部的 API 请求(如通过 HTTP),并将这些请求发送给 Controller,最终转发给合适的 Model Worker 来完成推理 + `--host 0.0.0.0`:绑定到所有网络接口,允许外部访问该 API Server。 详细过程: 当外部应用(如使用 OpenAI 官方的 API 客户端)发送请求到 API Server 时,API Server 会将请求转发给 Controller。 Controller 再将请求分配给空闲的 Model Worker,进行实际的模型推理。 推理结果返回到 Controller,Controller 再传回给 API Server,最终 API Server 将结果返回给客户端。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726815295578-e65294bc-db14-4cf1-8fdc-65eb05f9f1b4.png) ## 模型调用 <font style="color:#dd4a68;">curl</font><font style="color:#000000;"> -X POST http://localhost:8000/v1/completions </font><font style="color:#999999;">\</font> <font style="color:#000000;">-H </font><font style="color:#669900;">"Content-Type: application/json"</font><font style="color:#999999;">\</font> <font style="color:#000000;">-d </font><font style="color:#669900;">'{</font> <font style="color:#669900;">"model": "CodeLlama-7b-hf",</font> <font style="color:#669900;">"prompt": "You are a powerful text-to-SQL model. Your job is to answer questions about a database. You are given a question and context regarding one or more tables. You must output the SQL query that answers the question. ### Input: Which Class has a Frequency MHz larger than 91.5, and a City of license of hyannis, nebraska? ### Context: CREATE TABLE table_name_12 (class VARCHAR, frequency_mhz VARCHAR, city_of_license VARCHAR) ### Response:",</font> <font style="color:#669900;">"max_tokens": 41,</font> <font style="color:#669900;">"temperature": 0.5</font> <font style="color:#669900;">}'</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726815324034-f2e0a2d3-e907-4399-ab24-0b6b61716d76.png) #### 预期的 SQL 查询: 根据问题和表结构,预期生成的 SQL 查询结果应类似于: SELECT class FROM table_name_12 WHERE frequency_mhz > 91.5 AND city_of_license = 'hyannis, nebraska'; 实际输出: ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726815405012-d30aa43d-76ee-4fd8-acae-9a253c17ebc9.png) 然而实际生成结果与其不符,可以看出用原始模型得出的结果并不算好,需要根据需要进行微调。
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#117
No description provided.