DeepSeek 协程API 调用与 vllm推理,llamafactory当地vllm摆设

[复制链接]
发表于 2025-10-9 21:50:39 | 显示全部楼层 |阅读模式
简介

使用协程调用DeepSeek的API,发现结果并不显着,没有加速的结果。
但如是当地摆设DeepSeek,当地摆设必要支持异步调用,我使用 llamafactory 摆设,发现协程加速的结果还是很显着的。
代码实战

调用官方API

DeepSeek官方文档 https://api-docs.deepseek.com/zh-cn/
python 的调用代码如下,该调用方式为同步调用速率很慢。
  1. # Please install OpenAI SDK first: `pip3 install openai`
  2. from openai import OpenAI
  3. client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
  4. response = client.chat.completions.create(
  5.     model="deepseek-chat",
  6.     messages=[
  7.         {"role": "system", "content": "You are a helpful assistant"},
  8.         {"role": "user", "content": "Hello"},
  9.     ],
  10.     stream=False
  11. )
  12. print(response.choices[0].message.content)
复制代码
  1. import os
  2. from tqdm import tqdm
  3. from dotenv import load_dotenv
  4. # 加载 .env 文件的密钥
  5. load_dotenv()
  6. api_key = os.getenv("deepseek_api")
  7. queries = [
  8.     "What is AI?",
  9.     "How does deep learning work?",
  10.     "Explain reinforcement learning.",
  11.     "人工智能的应用领域有哪些?",
  12.     "大模型是如何进行预训练的?",
  13.     "什么是自监督学习,它有哪些优势?",
  14.     "Transformer 结构的核心组件是什么?",
  15.     "GPT 系列模型是如何生成文本的?",
  16.     "强化学习在游戏 AI 中的应用有哪些?",
  17.     "目前 AI 领域面临的主要挑战是什么?"
  18. ]
  19. answer1 = []
  20. for query in tqdm(queries):
  21.     # 官方提供的API调用方式
  22.     response = client.chat.completions.create(
  23.         model="deepseek-chat",
  24.         messages=[
  25.             {"role": "system", "content": "You are a helpful assistant"},
  26.             {"role": "user", "content": "Hello"},
  27.         ],
  28.         stream=False,
  29.     )
  30.     content = response.choices[0].message.content
  31.     answer1.append(content)
复制代码
为了防止在分享代码的时间,导致 API Key 走漏,我把key生存到 .env 文件中,通过load_dotenv加载密钥。

协程异步调用

  1. import asyncio
  2. from typing import List
  3. # from langchain.chat_models import ChatOpenAI
  4. from langchain_openai import ChatOpenAI
  5. from langchain.schema import SystemMessage, HumanMessage
  6. # 初始化模型
  7. llm = ChatOpenAI(
  8.     model_name="deepseek-chat",
  9.     # model_name="deepseek-reasoner",
  10.     openai_api_key=api_key,
  11.     openai_api_base="https://api.deepseek.com/v1",
  12. )
  13. async def call_deepseek_async(query: str, progress) -> str:
  14.     messages = [
  15.         SystemMessage(content="You are a helpful assistant"),
  16.         HumanMessage(content=query),
  17.     ]
  18.     response = await llm.ainvoke(messages)
  19.     progress.update(1)
  20.     return response.content
  21. async def batch_call_deepseek(queries: List[str], concurrency: int = 5) -> List[str]:
  22.     semaphore = asyncio.Semaphore(concurrency)
  23.     progress_bar = tqdm(total=len(queries), desc="Async:")
  24.     async def limited_call(query: str):
  25.         async with semaphore:
  26.             return await call_deepseek_async(query, progress_bar)
  27.     tasks = [limited_call(query) for query in queries]
  28.     return await asyncio.gather(*tasks)
  29. # for python script
  30. # responses = asyncio.run(batch_call_deepseek(queries, concurrency=10))
  31. # for jupyter
  32. response = await batch_call_deepseek(queries, concurrency=10)
复制代码
留意:异步调用必要使用 await 期待。
下述是tqdm 别的的一种,协程进度条的写法:
  1. from tqdm.asyncio import tqdm_asyncio
  2. results = await tqdm_asyncio.gather(*tasks)
复制代码
上述的异步协程代码,我调用DeepSeek的API,没有加速结果,我猜疑官方举行了限速。
我使用当地llamafactory摆设的DeepSeek,上述异步协程的结果加速显着。
llamafactory vllm当地摆设 deepseek的脚本,只支持 linux 体系。
deepseek_7B.yaml 文件内容:
  1. model_name_or_path: deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
  2. template: deepseek3
  3. infer_backend: vllm
  4. vllm_enforce_eager: true
  5. trust_remote_code: true
复制代码
linux 摆设脚本:
  1. nohup llamafactory-cli api deepseek_7B.yaml > deepseek_7B.log 2>&1 &
复制代码
异步协程 方法二

下述是 ChatGPT 天生的别的一种异步协程写法。
(下述方法我没有在当地摆设的API上测试过,仅供各人参考)
  1. import asyncio
  2. from tqdm.asyncio import tqdm_asyncio
  3. answer = []
  4. async def fetch(query):
  5.     response = await client.chat.completions.create(
  6.         model="deepseek-chat",
  7.         messages=[
  8.             {"role": "system", "content": "You are a helpful assistant"},
  9.             {"role": "user", "content": query},
  10.         ],
  11.         stream=False,
  12.     )
  13.     return response.choices[0].message.content
  14. async def main():
  15.     tasks = [fetch(query) for query in queries]
  16.     results = await tqdm_asyncio.gather(*tasks)
  17.     answer.extend(results)
  18. asyncio.run(main())
复制代码
vllm_infer

如果你是linux体系,那么相比API调用,最快的方式就是vllm推理。
你必要使用下述脚本,
https://github.com/hiyouga/LLaMA-Factory/blob/main/scripts/vllm_infer.py
  1. python vllm_infer.py \
  2. --model_name_or_path deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
  3. --template deepseek3 \
  4. --dataset industry_cls \
  5. --dataset_dir ../../data/llamafactory_dataset/ \
  6. --save_name output/generated_predictions.jsonl
复制代码
llamafactory 可以指定自界说的数据集所在,你必要构建相应格式的数据集文件。
数据集文件夹下的文件:




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表