Python加载本地大模型(Qwen3.5 8B)

Python加载本地大模型

实现过程

  1. 加载模型
    ↓
  2. 加载Tokenizer
    ↓
  3. 构造Prompt
    ↓
  4. 文本转Token
    ↓
  5. GPU推理(generate)
    ↓
  6. Token转文本(decode)

流程说明:

  • 加载模型 :从本地目录读取预训练好的大模型权重文件(如 model.safetensors),并加载到内存中。
  • 加载 Tokenizer:分词器负责将自然语言文本与模型能理解的 Token 编号相互转换,是文本处理的第一步。
  • 构造 Prompt :将用户输入按照模型要求的聊天模板(如 Qwen 的 <|im_start|> 格式)拼接成完整的提示词。
  • 文本转 Token:通过 Tokenizer 将 Prompt 文本切分为 Token ID 序列,并转换为 PyTorch Tensor,供模型读取。
  • GPU 推理(generate):将 Token 序列送入模型,在 GPU 上执行前向计算,逐 Token 生成回答内容。
  • Token 转文本(decode):将模型输出的 Token ID 序列解码回可读的中文文本,得到最终回答。## 所需依赖
javascript 复制代码
pip install -i https://mirror.nju.edu.cn/pypi/web/simple transformers
pip install -i https://mirror.nju.edu.cn/pypi/web/simple accelerate

代码实现

javascript 复制代码
import os
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# =====================================================
# 指定使用哪块GPU
# 0表示第一块显卡
# =====================================================
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

# =====================================================
# 本地模型目录
# 例如:
# /hy-tmp/
# ├── config.json
# ├── tokenizer.json
# ├── model.safetensors
# =====================================================
model_path = "/hy-tmp"

# =====================================================
# 加载Tokenizer(分词器)
#
# 作用:
# 把中文转换成模型认识的Token编号
#
# 示例:
# "你好"
# ↓
# [151644, 872]
# =====================================================
tokenizer = AutoTokenizer.from_pretrained(model_path)

# =====================================================
# 加载大模型
#
# torch_dtype=float16
#   使用FP16半精度
#   显存占用更小
#
# device_map="auto"
#   自动加载到GPU
#   单卡、多卡都能适配
# =====================================================
model = AutoModelForCausalLM.from_pretrained(
    model_path,
    torch_dtype=torch.float16,
    device_map="cuda:0"
)

# =====================================================
# 查看模型实际运行设备
# 正常应输出:
# cuda:0
# =====================================================
print("模型所在设备:", next(model.parameters()).device)

# =====================================================
# 用户问题
# =====================================================
query = "你是谁"

# =====================================================
# 构造聊天格式
#
# role:
#   user      用户
#   assistant AI
#   system    系统提示词
# =====================================================
messages = [
    {
        "role": "user",
        "content": query
    }
]

# =====================================================
# 应用Chat模板
#
# Qwen要求:
#
# <|im_start|>user
# 你是谁
# <|im_end|>
#
# 自动拼接成模型需要的格式
# =====================================================
prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,             # 返回文本
    add_generation_prompt=True  # 自动加assistant开始标记
)

print("Prompt内容:")
print(prompt)

# =====================================================
# 分词(Tokenization)
#
# 文本
# ↓
# Token ID
# ↓
# Tensor
#
# return_tensors="pt"
# 表示返回PyTorch Tensor
# =====================================================
inputs = tokenizer(
    prompt,
    return_tensors="pt"
)

# =====================================================
# 把输入移动到模型所在设备
#
# CPU -> GPU
# =====================================================
inputs = inputs.to(model.device)

# =====================================================
# 模型推理
#
# max_new_tokens
#   最多生成100个Token
#
# do_sample=True
#   开启随机采样
#
# temperature=0.7
#   控制创造性
#
#   0.1 非常保守
#   0.7 常用
#   1.2 发散
# =====================================================
outputs = model.generate(
    **inputs,
    max_new_tokens=100,
    do_sample=True,
    temperature=0.7
)

# =====================================================
# 解码
#
# Token
# ↓
# 中文文本
#
# skip_special_tokens=True
# 去掉特殊标记
# =====================================================
answer = tokenizer.decode(
    outputs[0],
    skip_special_tokens=True
)

print("\n模型回答:")
print(answer)
相关推荐
东莞市云毅网络有限公司7 小时前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
数字融合9 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0119 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
Marst Code11 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红11 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
外收内放13 小时前
Python基础语法练习题(57-58)
开发语言·python
朝朝辞暮i14 小时前
VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch
人工智能·python·深度学习·神经网络·vla
小鹿的周先生14 小时前
第11章-Structured-Output
开发语言·人工智能·python
梦在远山后14 小时前
通过 WSS 让 Server 安全调用 Desktop 本地工具(下01):Ticket、人工确认、幂等与断线对账
python·langchain·agent
泡海椒15 小时前
JQuick-Excel 实战:FORMAT 管理日期与数字的 Excel 显示
开发语言·python·excel