DeepSeek作为国产顶尖开源大模型,其优秀的语义理解和生成能力备受关注。本文将手把手教你如何在本地计算机部署DeepSeek模型并实现对话交互,支持CPU/GPU双模式运行。
最低配置:16GB内存 + 100GB存储空间(仅运行7B模型)
推荐配置:24GB以上显存的NVIDIA显卡(如RTX 3090/4090)
# 创建Python虚拟环境
conda create -n deepseek python=3.10
conda activate deepseek
# 安装基础依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # CUDA版本
# pip install torch torchvision torchaudio # CPU版本
# 安装模型相关库
pip install transformers==4.37.0 accelerate sentencepiece
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="deepseek-ai/deepseek-llm-7b-chat",
local_dir="./deepseek-7b-chat",
token="your_hf_token" # 需要申请访问权限
)
从官方渠道获取模型文件后,组织为以下目录结构:
deepseek-7b-chat/
├── config.json
├── model.safetensors
└── tokenizer.model
创建deepseek_demo.py
文件:
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_path = "./deepseek-7b-chat" # 模型路径
device = "cuda" if torch.cuda.is_available() else "cpu"
# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
trust_remote_code=True,
torch_dtype=torch.float16,
device_map="auto"
).to(device)
# 生成函数
def generate_response(prompt):
messages = [{"role": "user", "content": prompt}]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(device)
outputs = model.generate(
inputs,
max_new_tokens=512,
do_sample=True,
temperature=0.8,
top_p=0.9
)
response = tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True)
return response
# 测试对话
if __name__ == "__main__":
while True:
user_input = input("用户:")
if user_input.lower() == "exit":
break
print("助手:", generate_response(user_input))
from transformers import BitsAndBytesConfig
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
model_path,
quantization_config=quant_config,
# ...其他参数
)
def handle_conversation():
history = []
while True:
user_input = input("用户:")
if user_input == "reset":
history = []
print("对话历史已重置")
continue
history.append({"role": "user", "content": user_input})
inputs = tokenizer.apply_chat_template(
history,
add_generation_prompt=True,
return_tensors="pt"
).to(device)
# 生成逻辑...
history.append({"role": "assistant", "content": response})
显存不足问题
使用model.half()
进行半精度推理
添加device_map="auto"
参数自动分配设备
尝试更小的模型版本(如1.3B)
分词器报错处理
# 在加载tokenizer时添加额外参数
tokenizer = AutoTokenizer.from_pretrained(
model_path,
use_fast=False,
trust_remote_code=True
)
3.加速推理技巧
# 使用Flash Attention
model = AutoModelForCausalLM.from_pretrained(
model_path,
use_flash_attention_2=True,
# ...其他参数
)
设备 | 模型版本 | 内存占用 | 推理速度(tokens/s) |
---|---|---|---|
RTX 4090 | 7B | 18GB | 42.5 |
CPU(i9-13900K) | 7B | 32GB | 1.2 |