内容目录

前言

听了晓华老师分享的模型微调第一节课,其中有不少知识点需要后续查询资料了解,所以我对知识要点做了部分记录总结。同时模型微调涉及到一些基本的环境准备操作,例如Git客户端的安装使用、ubuntu子系统的安装等,我也顺便把过程梳理下来,方便其他同学了解。

试用过程索引

总体来说,模型微调的前序工作过程主要有下面几个步骤:

  • Step1:准备机器环境
  • Step2:准备Git客户端
  • Step3:访问魔塔社区,查找Llama3模型
  • Step4:通过Git clone命令,拉取Llama3的代码
  • Step5:加载Llama3模型

环境准备

环境准备有两种方式:本地环境 或 阿里云远程环境
本地环境:需要本机有比较强的显卡做支持,例如:运行Llama3-8B需要20G的显存,本地的机器有24G+的显存。
远程环境:如果本地没有比较强的显卡做支撑,可以通过试用阿里云的免费PAI环境。(这种方式在忙时可能存在没有空余机器可用的情况)

方式一:本地环境

安装ubuntu系统

在Windows下安装子系统是比较常见的教程,网上有比较多的参考资料可供搜索。为了避坑,我这里基于网上的教程进行更为细化的操作指南梳理,以及可能踩坑问题的提醒。

安装方法:

  1. 检查Windows版本
    WSL最早出现在Windows 10版本1709(即Windows 10秋季创意者更新)中。因此,首先确保你的Windows系统版本是Windows 10秋季创意者更新或更高版本。

  2. 检查Hyper-V支持:WSL 2需要Hyper-V支持。你可以通过以下步骤检查是否支持Hyper-V

    • 在开始菜单中搜索“Windows功能”并打开“启用或关闭Windows功能”。
    • 确保“Hyper-V”复选框已选中。

备注:此处一定要确认当前电脑的系统版本以及是否支持Hyper-V,我的某台电脑里如下所示是不支持Hyper-V。
file

  1. 启用WSL功能
    打开Windows PowerShell或命令提示符(以管理员身份运行)。运行以下命令来启用WSL功能:

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  2. 安装WSL 2

    • 打开Microsoft Store并搜索Ubuntu,选择Ubuntu发行版并安装。
    • 在安装完成后,打开Windows PowerShell或命令提示符(以管理员身份运行)并运行以下命令来将WSL 2设置为默认版本:
      wsl --set-default-version 2
  3. 启动ubuntu系统:安装完毕后,启动Windows命令行,点击+号会多出一个ubuntu
    file

安装必备组件
1、安装Git客户端
  1. 访问Git官网(https://git-scm.com) 下载并安装适合系统的Git版本。
  2. 配置Git:
    • 打开命令提示符(Command Prompt)或Git Bash。
    • 配置全局用户名和邮箱地址:
      git config --global user.name "Dongming"
      git config --global user.email "zgdmemail@126.com"
2、安装Python

在ubuntu系统下确认模型必备的Python已经安装。可以通过以下命令检查Python版本:

python --version
3、安装pip

确保系统中已经安装了pip,它是Python的包管理工具。可以使用以下命令安装pip:

sudo apt update
sudo apt install python3-pip
4、安装依赖库

安装必要的Python依赖库,如transformers、torch等。可以使用pip进行安装:

pip install transformers torch

pytorch大概700多M,下载安装这个过程可能会比较久,耐心等待下。

5、安装Jupyter Notebook

安装Jupyter Notebook,方便后续运行代码查看用,命令为

pip install jupyter

方式二:远程环境

申请免费试用资源
  1. 访问人工智能平台 PAI页面https://www.aliyun.com/product/bigdata/learn
  2. 点击页面中的"免费试用"
  3. 选择交互式建模的"立即试用"
    file
建立交互式实例
  1. 在人工智能平台 PAI页面点击"立即开通"
    file

  2. 进入工作台之后选择"交互式建模(DSW)"
    file

  3. 在右侧页面中选择新建实例并输入相关内容,例如:

    实例名称:Llama3_for_study

  4. 选择支持资源包抵扣的CPU和GPU后,选择下一步创建实例。

  5. 稍等片刻后,在实例页面显示"运行中"状态,就可以点击打开进入远程环境
    file

  6. 点击打开,进入远程环境如下:
    file

下载代码

查找Llama3模型

  1. 访问https://modelscope.cn/models
  2. 在下拉框搜索Llama3,查找对应的模型
    (或者直接访问LLM 的https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct/summary)
  3. 在页面的模型文件中,找到"下载模型",获取Git的地址
    file

拉取代码

本地环境

如果使用的是本地环境,在安装了Git客户端后,选择对应的目录拉取代码。

  1. 在本地电脑的合适目录下(例如:E:\Code目录),右键菜单→选择Git bash
  2. 在Git Bash中执行以下命令来克隆代码库:
    git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git

又是一个漫长的拉取代码的过程,代码拉取完毕大概30G。
file

远程环境

由于远程环境已经提前安装好了Git、Jupyter、Python、torch等环境依赖,所以直接拉取代码即可。

  1. 在远程管理台切换至Terminal
  2. 在命令行下输入同样的拉取代码指令
    file

加载模型

检测运行环境

在Jupyter Notebook中,运行以下指令,检测当前机器环境

import sys
import torch

# 输出Python版本
print("当前Python版本:", sys.version)

# 输出PyTorch版本
print("当前PyTorch版本:", torch.__version__)

# 检查GPU是否可用并输出显卡情况
if torch.cuda.is_available():
    gpu_name = torch.cuda.get_device_name(0)
    gpu_memory = torch.cuda.get_device_properties(0).total_memory / 1e9  # 转换为GB
    print(f"发现GPU:{gpu_name}")
    print(f"    显存总量:{gpu_memory} GB")
else:
    print("未发现可用的GPU设备")

运行后提示如下信息:
file

安装ipywidgets

直接使用Llama3提供的加载代码,会报错提示安装ipywidgets,所以我们切换到Terminal下通过pip安装对应的组件。

pip install ipywidgets

运行Llama3提供的加载模型代码

import transformers
import torch
from modelscope import snapshot_download
from transformers import AutoTokenizer, pipeline

model_id = snapshot_download("LLM-Research/Meta-Llama-3-8B-Instruct")

# 加载tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id)

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device="cuda",
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

prompt = pipeline.tokenizer.apply_chat_template(
        messages, 
        tokenize=False, 
        add_generation_prompt=True
)

terminators = [
    tokenizer.eos_token_id,
    tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

运行成功后,大模型会通过对话返回相关信息。
file

在加载大模型的过程中,阿里云的控制台会实时显示显存的使用情况。
file
除了使用控制台,可以通过Linux命令查看显存的使用情况

watch -n 1 nvidia-smi

知识点总结

Llama3模型简介

Llama3是Meta推出的最新一代大型语言模型(LLM),它基于Llama2架构进行了进一步的优化和增强。Llama3在性能和可扩展性方面进行了显著提升,能够轻松处理多步骤任务。通过改进的后训练过程,Llama3显著降低了错误拒绝率,提高了回应的一致性,并增加了模型答案的多样性。此外,Llama3在推理、代码生成和指令执行等能力上都有显著提升。

Llama3模型提供了两种规模的版本:8B参数和70B参数,每种规模都有基础(预训练)版本和指令调优版本。所有版本的模型都可以在各种消费级硬件上运行,并且具有8K令牌的上下文长度。

模型训练的三个阶段:

模型训练通常包括三个阶段:Self-Supervised Pre-Training(自监督预训练)、Self-Supervised Fine-Tuning(自监督微调)和Reinforcement Learning with Human Feedback(强化学习与人类反馈)。

  • Self-Supervised Pre-Training (SFT):
    在这个阶段,模型通过大规模的未标记数据(如Masked Language Model(MLM)或Next Sentence Prediction(NSP))进行自监督预训练,学习捕捉数据中的模式和特征。这有助于模型建立起对数据的基本理解和知识。

  • Self-Supervised Fine-Tuning (SSFT):
    在自监督微调阶段,模型使用少量标记数据对预训练模型进行微调,以适应特定任务或领域的要求。微调过程有助于提升模型在特定任务上的性能和泛化能力。

  • Reinforcement Learning with Human Feedback (RLHF):
    在这一阶段,模型通过与人类交互和接收人类反馈来进一步优化和改进。强化学习算法被用于指导模型在与环境互动时学习最优策略,同时结合人类反馈提供额外的指导和调整。

Llama3模型文件解析:

  • config.json: 这个文件通常包含有关模型或工具的配置信息,例如超参数设置、模型结构等。
  • configuration.json: 与 config.json 类似,用于存储模型或工具的配置信息,可能包含不同的设置和参数。
  • generation_config.json: 这个文件可能包含生成文本时的配置信息,如生成文本的长度、温度等参数。
  • model.safetensors.index.json: 这个文件可能是模型的索引文件,用于快速访问模型中的张量数据。
  • model-00001-of-00004.safetensors: 这是模型的安全张量文件,可能包含模型的权重和参数数据。
  • special_tokens_map.json: 这个文件通常包含特殊标记(special tokens)的映射,用于处理特殊标记在模型中的表示方式。
  • tokenizer.json: 存储了分词器(tokenizer)的配置信息和规则,用于将文本转换为模型可处理的输入格式。
  • tokenizer_config.json: 与 tokenizer.json 类似,包含有关分词器配置的信息,例如词汇表、分词规则等。

欢迎关注公众号以获得最新的文章和新闻

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

分类文章

personal_logo
Dongming
自由职业者

推荐活动

推荐文章

【操作攻略】GPU云环境的使用介绍
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
【课程总结】day19(中):Transformer架构及注意力机制了解
【重拾数学知识】矢量的点乘和叉乘
【课程总结】Day11(上):手势图像识别实战(LeNet模型)
【课程总结】day34:多模态大模型之ViT模型、CLIP模型论文阅读理解
【目录】AI知识学习路线图
【课程总结】day33:文生图StableDiffusion模型初步了解以及部署体验
【课程总结】day32(下):Xinference部署向量化模型
【课程总结】day31:多模态大模型初步了解
内容目录
滚动至顶部