最初,在 Windows 11 环境下安装并运行了 Unsloth,虽然安装过程顺利,但在模型微调过程中遇到了各种错误。尽管大部分问题都通过逐一解决了,但一些关键的 GPU 加速库仍然无法正常运行。这些库要求在 Linux 系统上才能正常运行并充分发挥其性能。
由于对 Linux 系统不够熟悉,尝试通过编译工具在 Windows 上重新编译这些库,但问题依然未能解决。最终,选择通过 Windows 上的 WSL(Windows Subsystem for Linux)安装 Ubuntu 的方式来解决这些兼容性问题。这样既避免了完全切换到 Linux 的麻烦,又能够使用 Linux 环境来进行模型微调。
第一步:在 WINDOWS 上通过 WSL 安装 UBUNTU
如果您使用的是 Linux 操作系统(建议使用 Ubuntu),可以跳过这一部分的内容,直接进入后续步骤。同时,确保您在 Linux 系统上安装了显卡驱动,以便正常使用 GPU 进行加速。
如果您在 Windows 上通过 WSL 安装 Ubuntu,由于 WSL 是一种虚拟化技术,您无需在 WSL 的 Ubuntu 系统中再次安装显卡驱动。只要 Windows 宿主机上已经正确安装并配置了显卡驱动,WSL 内的 Ubuntu 系统将自动使用这些驱动配置,支持 GPU 加速。
注意: 如果你已经通过了 Hugging Face 的审核,下载步骤可以省略。你可以直接通过 Hugging Face 的接口下载相应的模型文件。下载完成后,模型会被缓存到本地文件系统,下次微调时无需重复下载。此外,获得模型使用权后,你还需要从 Hugging Face 获取一个 API Key,并将该模型与 API Key 关联。
不过,手动下载模型相对简单,建议直接下载以简化流程。
第二步:模型加载
通过 VSCode 或 PyCharm 之类的 IDE 新建一个 Jupyter 文件(方便调试,调试过程中会提示你缺少这样那样的库,需要安装),复制以下代码:
import json
from unsloth import FastLanguageModel
import torch
max_seq_length = 2048# Choose any! We auto support RoPE Scaling internally!
dtype = None# None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+
load_in_4bit = True# Use 4bit quantization to reduce memory usage. Can be False.# 4bit pre quantized models we support for 4x faster downloading + no OOMs.
fourbit_models = [
"unsloth/Meta-Llama-3.1-8B-bnb-4bit", # Llama-3.1 15 trillion tokens model 2x faster!"unsloth/Meta-Llama-3.1-8B-Instruct-bnb-4bit",
"unsloth/Meta-Llama-3.1-70B-bnb-4bit",
"unsloth/Meta-Llama-3.1-405B-bnb-4bit", # We also uploaded 4bit for 405b!"unsloth/Mistral-Nemo-Base-2407-bnb-4bit", # New Mistral 12b 2x faster!"unsloth/Mistral-Nemo-Instruct-2407-bnb-4bit",
"unsloth/mistral-7b-v0.3-bnb-4bit", # Mistral v3 2x faster!"unsloth/mistral-7b-instruct-v0.3-bnb-4bit",
"unsloth/Phi-3.5-mini-instruct", # Phi-3.5 2x faster!"unsloth/Phi-3-medium-4k-instruct",
"unsloth/gemma-2-9b-bnb-4bit",
"unsloth/gemma-2-27b-bnb-4bit", # Gemma 2x faster!
] # More models at https://huggingface.co/unsloth# 载入的模型,如下目录文件是我下载之后存入本地文件系统中的文件。
model_path = "/mnt/d/02-LLM/LLM-APP/00-models/unsloth-llama-3.1-8b-bnb-4bit"# 加载模型和分词器
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = model_path, # Choose any model from above list!
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
# token = "hf_...", # use one if using gated models like meta-llama/Llama-2-7b-hf
)