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的列表推导式,这是一种更简洁的创建列表的方式。它首先检查数组的长度是否