DeepSeek+python:API服务化部署

DeepSeek+python:API服务化部署

需要根据显卡安装对应的PyTorch
我的显卡是RTX 4060,安装支持 CUDA 的 PyTorch 版本。安装命令

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

验证安装
安装完成后,运行以下代码验证 PyTorch 是否正确安装并支持 GPU:

import torch
print(torch.__version__)  # 查看 PyTorch 版本
print(torch.cuda.is_available())  # 检查 CUDA 是否可用
print(torch.cuda.get_device_name(0))  # 查看 GPU 名称

运行结果

2.6.0+cu118
True
NVIDIA GeForce RTX 4060 Laptop GPU

如果你的 CUDA 版本不同,请参考 PyTorch 官方安装指南 选择合适的版本

安装bitsandbytes, bitsandbytes是一个用于量化模型的库,支持 4-bit 和 8-bit 量化

pip install bitsandbytes

API服务化部署脚本如下:

from flask import Flask, request
from transformers import AutoModelForCausalLM, AutoTokenizer

app = Flask(__name__)
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-7b-instruct", 
                                           device_map="auto", 
                                           load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-7b-instruct")

@app.route('/generate', methods=['POST'])
def generate():
    inputs = tokenizer(request.json['prompt'], return_tensors="pt").to("cuda")
    outputs = model.generate(**inputs, max_new_tokens=200)
    return tokenizer.decode(outputs[0])

如遇无法从 Hugging Face Hub 下载模型文件:
检查网络连接
Hugging Face Hub 需要稳定的网络连接来下载模型文件。请确保:你的网络可以正常访问 https://huggingface.co
使用镜像源
如果你的网络访问 Hugging Face 较慢或不稳定,可以尝试使用镜像源。以下是配置方法
在终端中运行以下命令,修改 Hugging Face 的配置文件:

huggingface-cli login --endpoint https://hf-mirror.com

离线模式
如果网络问题无法解决,可以尝试离线模式,将下载的模型文件(./deepseek-coder-7b-instruct 目录)复制到目标机器,在目标机器上,使用本地路径加载模型

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("./deepseek-coder-7b-instruct", device_map="auto", load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("./deepseek-coder-7b-instruct")

我在运行以上步骤后报错:

The `load_in_4bit` and `load_in_8bit` arguments are deprecated and will be removed in the future versions. Please, pass a `BitsAndBytesConfig` object in `quantization_config` argument instead.

解决办法:
使用 BitsAndBytesConfig 替代 load_in_4bit 和 load_in_8bit。
确保模型路径正确,或手动下载模型文件并加载本地模型

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch  # 导入 torch 模块

# 配置 4-bit 量化
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,  # 启用 4-bit 量化
    bnb_4bit_use_double_quant=True,  # 使用双重量化
    bnb_4bit_quant_type="nf4",  # 量化类型
    bnb_4bit_compute_dtype=torch.float16  # 使用 torch.float16
)

# 加载模型
model = AutoModelForCausalLM.from_pretrained(
    "./deepseek-coder-7b-instruct",  # 本地路径
    quantization_config=quantization_config,
    device_map="auto"
)

以上即部署完成,可通过代码输入请求,示例:

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch  # 导入 torch 模块

# 配置 4-bit 量化
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,  # 启用 4-bit 量化
    bnb_4bit_use_double_quant=True,  # 使用双重量化
    bnb_4bit_quant_type="nf4",  # 量化类型
    bnb_4bit_compute_dtype=torch.float16  # 使用 torch.float16
)

# 加载模型
model = AutoModelForCausalLM.from_pretrained(
    "./deepseek-coder-7b-instruct",  # 本地路径
    quantization_config=quantization_config,
    device_map="auto"
)

# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("./deepseek-coder-7b-instruct")
prompt = "请用python写一个快速排序"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=200)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

运行结果如下:

请用python写一个快速排序算法


def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quickort(right)

print(quick_sort([3,6,8,10,1,2,1]))

# 输出: [1, 1, 2, 3, 6, 8, 10]

这个快速排序算法的实现使用了Python的列表推导式,这是一种更简洁的创建列表的方式。它首先检查数组的长度是否


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值