unsloth

Unsloth可以进行模型对话调用和模型微调的框架。现在我要用unsloth这个库在服务器上用jupyter进行微调模型。

先进行导入和调用流程

import os
# 1. 必须在 import unsloth 之前设置环境变量,彻底禁用离线时的网络检查
os.environ["HF_HUB_OFFLINE"] = "1"       

#os为环境变量的接口,HF_HUB_OFFLINE是Hugging Face的官方库,这里设置为1代表#True开启离线模式

from unsloth import FastLanguageModel
import torch

# 2. 严谨的导入顺序:unsloth 建议放在最前面
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "/root/workspace/weitiao/zy/models/Qwen2-7B-Instruct-bnb-4bit",#模型导#入
    max_seq_length = 2048,
    load_in_4bit = True,       #我们加载的是4bit动态量化模型
    # 3. 核心参数:强制只从本地加载,跳过远程连接
    local_files_only = True, 
)

print("模型加载成功!")

导入完成后在下面单元格中输入model可以看到模型的基本信息,此时没有LoRA

tokenizer查看分词器基本信息

查看模型的基本信息:

# 1. 硬件总量
gpu_stats = torch.cuda.get_device_properties(0)
max_memory = gpu_stats.total_memory / 1024**3

# 2. 预留占用 (模型加载后占掉的)
reserved_memory = torch.cuda.memory_reserved() / 1024**3

# 3. 剩余可用
free_memory = max_memory - reserved_memory

print(f"GPU: {gpu_stats.name}")
print(f"总显存: {max_memory:.2f} GB")
print(f"已占用: {reserved_memory:.2f} GB")
print(f"剩余可用: {free_memory:.2f} GB")

*****开始对话*****

普通对话

尝试对话,借助Unsloth进行模型创建有两个步骤,一个是借助apply_chat_template进行分词同时输入对话相关参数,第二个借助generate进行文本创建。

以下是一次对话的基本流程:

这是assistant之前的内容,给AI的输入

这里是把刚才那一段人可以看懂的内容,翻译成计算机可以看懂的数字信号(Token IDs)

.to("cuda")这一行把数据从内存搬到了RTX 4090的显存中。

model.generate(...):最核心的动作,

input_ids和attention_mask:告诉模型,问的问题,模型会注意这些关键字

max_new_tokens=max_seq_length:设定一个终点站,告诉模型最多可以写多少个字(Token),防止它没完没了地写下去。

use_cache=True:这是Unsloth的大模型加速开关,会让大模型记住已经写出来的字,这样写下一个字的时候,速度会加快。

当然直接输出的是一段数字,我们需要解码一下。

这是一个没有思考模式的AI回答的,没有思考链。对于unsloth来说,只需要把前面的思考模式打开就可以了。

当然Qwen2.5的7B模型没有思考链。

下面是带有系统提示词的对话:

前面无变化,在后面对模型调用时加上系统提示词就可以了。

function calling message

创建一些function calling的message,用这个可以调用外部函数。

创建一个外部函数例如查询天气的函数:

# 新增计算器工具
def calculator(expression: str) -> str:
    """计算数学表达式的结果"""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"计算错误: {str(e)}"

# 更新 tools 列表
tools = [
    # 原天气工具
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "查询即时天气函数,根据输入的城市名称,查询对应城市的实时天气,一次只能查询一个城市",
            "parameters": {
                "type": "object",
                "properties": {
                    "loc": {
                        "type": "string",
                        "description": "城市名称,注意,中国的城市需要用对应城市的英文名称代替,例如北京是Beijing,上海是Shanghai"
                    }
                },
                "required": ["loc"]
            }
        }
    },
    # 新增计算器工具
    {
        "type": "function",
        "function": {
            "name": "calculator",
            "description": "计算数学表达式的结果,支持加减乘除、幂运算等",
            "parameters": {
                "type": "object",
                "properties": {
                    "expression": {
                        "type": "string",
                        "description": "要计算的数学表达式,例如 2+3*5、(10-2)/4"
                    }
                },
                "required": ["expression"]
            }
        }
    }
]

垂直领域大模型数据集

HuggingFace数据集主页:https://huggingface.co/?activityType=all&feedType=following&trending=dataset

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐