【DeepSeek-R1】DeepSeek-R1-Distill-Qwen-1.5B 流式与非流式推理调用

from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
import torch
from threading import Thread


class DeepSeekModel:
    def __init__(self, model_path="D:\\Algorithm\\DeepSeek-R1-Distill-Qwen-1.5B\\DeepSeek-R1-Distill-Qwen-1.5B"):
        # 设备自适应,根据 GPU 可用性选择设备
        self.device = "cuda" if torch.cuda.is_available() else "cpu"
        print(f"Using device: {self.device}")

        # 加载 tokenizer 和模型,添加稳定性相关参数
        self.tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
        self.model = AutoModelForCausalLM.from_pretrained(
            model_path,
            device_map="auto",  # 显式指定设备映射
            trust_remote_code=True,
            torch_dtype=torch.bfloat16 if self.device == "cuda" else torch.float32,
            low_cpu_mem_usage=True,  # 减少 CPU 内存使用
            attn_implementation="eager"  # 禁用可能不稳定的优化
        ).to(self.device)

        # 设置模型为评估模式,避免不必要的梯度计算
        self.model.
<think>我们已知用户想了解如何通过HTTP调用deepseek-r1-distill-qwen模型的API。根据提供的引用,我们可以知道该模型可以通过多种方式部署(如Ollama、vLLM等),部署后提供API服务。由于用户明确提到HTTP调用,我们需要给出一个通用的HTTP API调用示例,并说明必要的步骤。 步骤: 1. 首先需要部署模型,部署方式可以是Ollama、vLLM等。 2. 部署完成后,模型会提供一个HTTP API端点(endpoint)。 3. 通过发送HTTP POST请求到该端点,并按照API要求的格式传递参数(如模型名称、输入文本等)来调用模型。 由于引用中提到了多种部署方式,这里我们以Ollama部署为例(因为引用[3]中提到了Ollama部署DeepSeek-R1-Distill-Qwen),并给出调用示例。 注意:不同的部署工具可能提供不同的API格式。Ollama的API格式类似于OpenAI的API格式,而vLLM部署的API可能有所不同。但用户要求的是通用的HTTP调用,因此我们以Ollama为例,因为它相对简单且引用中提到了。 Ollama部署后,默认会在本地11434端口提供API服务。 API调用示例(使用curl): ```bash curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:14b", "prompt": "为什么天空是蓝色的?", "stream": false }' ``` 或者使用Python代码(使用requests库): ```python import requests url = 'http://localhost:11434/api/generate' data = { "model": "deepseek-r1:14b", # 模型名称,根据部署时使用的模型名称填写 "prompt": "为什么天空是蓝色的?", "stream": False # 设置为False表示一次性返回所有结果,而不是流式 } response = requests.post(url, json=data) if response.status_code == 200: result = response.json() print(result['response']) # 输出模型的回答 else: print(f"请求失败,状态码:{response.status_code}") ``` 注意:在实际部署时,需要确保模型已经正确下载并运行。例如,使用Ollama运行模型:`ollama run deepseek-r1:14b`。 如果使用vLLM部署(引用[4]),则API调用方式可能不同。vLLM通常提供OpenAI兼容的API,因此可以这样调用: ```python from openai import OpenAI # 注意:vLLM部署的API地址可能与Ollama不同 client = OpenAI( base_url="http://localhost:8000/v1", # vLLM默认使用8000端口 api_key="token-abc123" # 如果设置了api-key,否则可以忽略 ) completion = client.completions.create( model="deepseek-r1-distill-qwen-7b", # 模型名称,根据部署时设置 prompt="为什么天空是蓝色的?" ) print(completion.choices[0].text) ``` 但是,由于用户要求的是HTTP调用,我们也可以给出vLLM的原始HTTP调用方式: ```bash curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1-distill-qwen-7b", "prompt": "为什么天空是蓝色的?", "max_tokens": 100, "temperature": 0.7 }' ``` 总结:具体调用方式取决于部署方式。用户需要先完成模型部署,然后根据部署工具提供的API文档进行调用。 §§相关问题§§ 1. 如何部署deepseek-r1-distill-qwen模型? 2. 使用Ollama部署deepseek-r1-distill-qwen模型的步骤是什么? 3. 使用vLLM部署deepseek-r1-distill-qwen模型有哪些优势?</think>### 如何通过HTTP调用DeepSeek-R1-Distill-Qwen模型的API 要使用HTTP调用DeepSeek-R1-Distill-Qwen模型的API,需要先完成模型部署,然后通过API端点发送请求。以下是具体步骤: #### 1. **部署模型服务端** 首先需要部署模型服务,提供HTTP API端点。推荐两种部署方式: **方法一:使用Ollama部署(简单快捷)** ```bash # 下载并运行模型(14B版本) ollama run deepseek-r1:14b # 启动API服务(默认端口11434) ollama serve ``` 服务启动后,API端点:`http://localhost:11434/api/generate`[^3] **方法二:使用vLLM部署(高性能)** ```python from vllm import LLM, SamplingParams # 加载模型 llm = LLM(model="deepseek-r1-distill-qwen-7b") # 启动API服务(默认端口8000) !python -m vllm.entrypoints.openai.api_server --model deepseek-r1-distill-qwen-7b ``` 服务启动后,API端点:`http://localhost:8000/v1/completions`[^4] --- #### 2. **HTTP API调用示例 使用`curl`发送请求: **调用Ollama API** ```bash curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:14b", "prompt": "解释量子计算的基本原理", "stream": false, "options": {"temperature": 0.7} }' ``` **调用vLLM API(OpenAI兼容格式)** ```bash curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1-distill-qwen-7b", "prompt": "法国的首都是哪里?", "max_tokens": 100, "temperature": 0.5 }' ``` --- #### 3. **Python代码调用示例 使用`requests`库发送API请求: ```python import requests # API配置 API_URL = "http://localhost:8000/v1/completions" # vLLM端点 HEADERS = {"Content-Type": "application/json"} # 请求参数 payload = { "model": "deepseek-r1-distill-qwen-7b", "prompt": "如何预防感冒?请给出三点建议", "max_tokens": 200, "temperature": 0.6, "top_p": 0.9 } # 发送请求 response = requests.post(API_URL, headers=HEADERS, json=payload) # 处理响应 if response.status_code == 200: result = response.json() print("模型回复:", result["choices"][0]["text"]) else: print("请求失败,状态码:", response.status_code) ``` --- #### 4. **关键参数说明 | 参数 | 类型 | 说明 | |------|------|------| | `model` | string | 模型标识符(如`deepseek-r1:14b`) | | `prompt` | string | 输入文本提示 | | `max_tokens` | int | 生成文本的最大长度 | | `temperature` | float | 采样随机性(0-1,值越高越随机) | | `top_p` | float | 核采样概率(0-1,通常0.7-0.9) | | `stream` | bool | 是否启用流式响应 | --- #### 5. **注意事项 1. **认证安全**:生产环境需添加API密钥验证 2. **性能优化**: - 使用vLLM可获得更高吞吐量(比HuggingFace高14-24倍)[^4] - 批处理请求可提升效率 3. **模型版本**: - 7B参数版本:`deepseek-r1-distill-qwen-7b` - 14B参数版本:`deepseek-r1:14b` > 部署参考:DeepSeek-R1-Distill-Qwen可通过Ollama或vLLM框架部署[^1][^2],其中vLLM利用PagedAttention技术显著提升推理效率[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值