所有tag为书生大模型的文档,连同本文档在内,为书生大模型实战营训练内容,文档中的内容并不局限于实战营本身,但算力平台均首选上海AI实验室开发的云端集成开发环境InternStudio开发手册InternStudio算力平台的相关内容可以点击链接跳转。

1.Hugging Face社区

1.1 Hugging Face简介与注册

Hugging Face 最初专注于开发聊天机器人服务。尽管他们的聊天机器人项目并未取得预期的成功,但他们在GitHub上开源的Transformers库却意外地在机器学习领域引起了巨大轰动。如今,Hugging Face已经发展成为一个拥有超过100,000个预训练模型和10,000个数据集的平台,被誉为机器学习界的GitHub。

这里需要进入Hugging Face的官网进行注册(需要魔法),使用邮箱并且验证就可以快速注册。

image
image

1.2 CodeSpaces

在正式下载之前,先要介绍一下HF的Transformers库,作为HF最核心的项目,它可以:

  • 直接使用预训练模型进行推理
  • 提供了大量预训练模型可供使用
  • 使用预训练模型进行迁移学习

因此在使用HF前,需要下载Transformers等一些常用依赖库。这里以internlm2_5-1_8b举例,查看Hugging Face上该模型的地址

https://huggingface.co/internlm/internlm2_5-1_8b
image
image
image
image

由于模型文件通常比较大,如果是个人使用的本地环境亦或者是存储空间比较大的算力平台开发机器,通常会完整的下载整个模型的文件。如果没有条件,可以选择在Github的Codespaces上运行。

Codespaces是Github推出的线上代码平台,提供了一系列templates。

这里选择Jupyter Notebook进行创建环境。

image
image

创建好环境后,可以进入网页版VSCode的界面,这就是CodeSpace提供给的在线编程环境。

image
image

1.3 模型下载

1.3.1 参数

在界面下方的终端安装以下依赖,便于模型运行。

# 安装transformers
pip install transformers==4.38
pip install sentencepiece==0.1.99
pip install einops==0.8.0
pip install protobuf==5.27.2
pip install accelerate==0.33.0

安装完成后可以pip list检查一下几个主要的包是不是装好了。

image
image

考虑到个人GitHub CodeSpace硬盘空间有限(32GB可用),而7B的模型相对较大,这里先演示如何下载模型文件夹的特定文件。为方便演示直接在工作区创建文件,即**/workspaces/codespaces-jupyter**目录。

以下载模型的配置文件为例,先新建一个hf_download_josn.py文件。

touch hf_download_josn.py

在这个文件中输入以下代码:

import os
from huggingface_hub import hf_hub_download

# 指定模型标识符
repo_id = "internlm/internlm2_5-7b"

# 指定要下载的文件列表
files_to_download = [
    {"filename": "config.json"},
    {"filename": "model.safetensors.index.json"}
]

# 创建一个目录来存放下载的文件
local_dir = f"{repo_id.split('/')[1]}"
os.makedirs(local_dir, exist_ok=True)

# 遍历文件列表并下载每个文件
for file_info in files_to_download:
    file_path = hf_hub_download(
        repo_id=repo_id,
        filename=file_info["filename"],
        local_dir=local_dir
    )
    print(f"{file_info['filename']} file downloaded to: {file_path}")
image
image

下载完成后,就可以查看配置信息了。

如果你不知道这里面具体包含了什么,可以直接复制然后让大模型告诉你:

image
image
**总体信息**

- **`architectures`**: 指定模型的架构类型,此处为 `InternLM2ForCausalLM`,表明这是一个 InternLM2 系列的因果语言模型(Causal Language Model)。
- **`model_type`**: 表示模型的类型为 `internlm2`,与架构保持一致。

---

### **模型结构**

- **`hidden_size`**: 每一层的隐藏状态向量的维度(4096)。这是模型内部表示信息的维度大小。
- **`num_hidden_layers`**: 总共有 32 层 Transformer 模块,决定了模型的深度。
- **`num_attention_heads`**: 每层有 32 个注意力头,用于捕捉不同的上下文特征。
- **`intermediate_size`**: 前馈网络中间层的维度(14336),通常比 `hidden_size` 大,影响计算能力和表达能力。
- **`num_key_value_heads`**: 每层中用于键值对的注意力头数(8)。这是多头注意力机制的一个细分策略。

---

### **注意力机制**

- **`attn_implementation`**: 表示使用的是 `eager` 模式的注意力机制实现,可能用于优化性能。
- **`rope_scaling`** 和 **`rope_theta`**:
    - **`rope_scaling`**: 定义了相对位置编码(RoPE,Rotary Position Embedding)的动态缩放策略,这里是 `dynamic`,表示支持扩展到更长的上下文。
    - **`rope_theta`**: 控制旋转位置编码的周期(50000000),通常用于处理长序列任务。
- **`max_position_embeddings`**: 最大支持的输入序列长度(262144),表明模型可以处理非常长的上下文。

---

### **模型权重和初始化**

- **`initializer_range`**: 权重初始化范围(0.02),控制模型初始时的参数分布。
- **`bias`**: 如果为 `false`,表示模型中没有使用偏置(bias)参数。
- **`tie_word_embeddings`**: 是否将输入和输出的词嵌入层共享,`false` 表示不共享。

---

### **训练与推理**

- **`torch_dtype`**: 指定模型在推理时使用的张量数据类型(`bfloat16`),比 `float32` 更高效,且精度损失较小。
- **`use_cache`**: 如果为 `true`,表明在推理时会缓存注意力的中间结果以加速生成。
- **`rms_norm_eps`**: 均方根归一化(RMSNorm)的最小值(1e-5),用于保持数值稳定。

---

### **词汇与标记**

- **`vocab_size`**: 模型词表的大小(92544),表示支持的词或标记数量。
- **`bos_token_id`** 和 **`eos_token_id`**: 特殊标记,分别表示句子的起始和结束。
- **`pad_token_id`**: 用于填充的特殊标记 ID(2)。

---

### **版本与映射**

- **`auto_map`**: 定义了该模型如何与 Hugging Face Transformers 库中的 `AutoModel` 和 `AutoConfig` 自动加载接口映射。
- **`transformers_version`**: 指定兼容的 Transformers 库版本(4.41.0)。

---

### **总结**

这些参数通常用于配置一个基于 Transformer 架构的预训练语言模型,例如 InternLM2。其主要用途包括:

- 文本生成(如对话生成、文章续写)
- 问答系统
- 自然语言理解任务(如分类、摘要)

这个模型的高参数量和对长上下文的支持(262144 长度)表明,它特别适合处理需要广泛上下文依赖的任务。

1.3.2 模型本体

那么如果需想要下载一个完整的模型文件怎么办呢?

由于下载速度跟网速和模型参数量大小相关联,这里只尝试下载1.8b模型以及对应的配置文件。

创建一个python文件用于下载internlm2_5-1_8B模型并运行。

touch hf_download_1_8_demo.py

CodeSpace平台上是没有GPU资源的,因此Python代码中只使用CPU进行推理,需要修改跟CUDA有关的API。也正是这个原因,推理输出的时间比较长。

hf_download_1_8_demo.py文件中粘贴和运行以下内容:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("internlm/internlm2_5-1_8b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm2_5-1_8b", torch_dtype=torch.float16, trust_remote_code=True)
model = model.eval()

inputs = tokenizer(["A beautiful flower"], return_tensors="pt")
gen_kwargs = {
    "max_length": 128,
    "top_p": 0.8,
    "temperature": 0.8,
    "do_sample": True,
    "repetition_penalty": 1.0
}

# 以下内容可选,如果解除注释等待一段时间后可以看到模型输出
output = model.generate(**inputs, **gen_kwargs)
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
print(output)
image
image

在代码中,尝试让InternLM以“A beautiful flower”开头,对其进行“续写”。

最终输出的结果如下:

A beautiful flower is in the shape of a right circular cone. The radius of the base of the cone is 8 cm and the height of the cone is 12 cm. The cone is painted red. A small paintbrush can only paint a small circular area on the cone. How many paintbrushes are needed to paint the entire cone?

The area of the base of the cone is $8^2\pi = 64\pi$ . The area of the entire cone is $\frac{1}{3}\pi(12^2)(64) = 4096\pi$ .

InternLM的模型拥有强大的数学方面的能力,所以它返回了一个数学问题。

至此,模型下载运行就完成了。事后退出Codespaces,就可以删除之前创建的Jupyter环境。

2 魔搭社区平台

2.1 魔搭社区平台简介与注册

ModelScope是一个“模型即服务”(MaaS)平台,由阿里巴巴集团的达摩院推出和维护。它旨在汇集来自AI社区的最先进的机器学习模型,并简化在实际应用中使用AI模型的流程。

通过ModelScope,用户可以轻松地探索、推理、微调和部署各种AI模型(不需要魔法)。

image
image

注册登录ModelScope平台,进入导航栏模型库(模型库里也包含了很多非官方的模型),可以搜索Internlm2_5-chat-1_8b,下载1.8b的对话模型,也类似于Hugging Face一样拥有具体的详情页。

image
image

2.2 模型下载

这一次选择在算力平台下载和运行模型。注意配置需求需要Cuda-12.2的。

image
image

在用VS Code完成SSH连接后,就可以在当前终端上可以输入命令了。

ms_demo激活一个可用的conda虚拟环境(开发机自带,没有的话就创建一个)。

# 激活环境
conda activate /root/share/pre_envs/pytorch2.1.2cu12.1

# 安装 modelscope
pip install modelscope -t /root/env/maas
pip install numpy==1.26.0  -t /root/env/maas
pip install packaging -t /root/env/maas

为了保证能够找到我们每次装的依赖,每次新建一个终端之后都需要导出path。

如果不改变终端,导出一次就够了。

export PATH=$PATH:/root/env/maas/bin
export PYTHONPATH=/root/env/maas:$PYTHONPATH

接着创建demo目录。

mkdir -p /root/ms_demo

尝试下载internlm2_5-7b-chat,考虑到7B的模型文件比较大,这里可以先采用modelscope的cli工具(当然Hugging Face也有)来下载指定文件,在命令行输入以下命令:

modelscope download \
    --model 'Shanghai_AI_Laboratory/internlm2_5-7b-chat' \
    tokenizer.json config.json model.safetensors.index.json \
    --local_dir '/root/ms_demo'

完成后刷新一下文件目录,就能看到在ms_demo中下载了指定的json文件。

3 魔乐社区平台

3.1 魔乐社区平台简介

魔乐社区(Modelers)是一个提供多样化、开源模型的平台,旨在促进开发者和研究人员在最先进的模型和流行应用上进行协作。

image
image

3.2 魔乐社区平台简介

这里可以继续使用我们创建的开发机。

cd /
mkdir ml_demo
cd ml_demo

然后可以下载该模型

# 确保安装git-lfs 保证大文件的正常下载
apt-get install git-lfs
git lfs install
# clone 仓库
git clone https://modelers.cn/Intern/internlm2_5-1_8b-chat.git

刷新一下文件夹,即可在ml_demo中找到下载好的模型文件。

在魔乐社区中,还推荐了一个新的深度学习开发套件openMind Library,除了常用的Transforms的API,也可以探索如何使用openMind来加载模型。

# 确保按指南安装好openmind后
from openmind import AutoModel
model = AutoModel.from_pretrained("Intern/internlm2_5-1_8b-chat", trust_remote_code="True")

openMind Library是一个深度学习开发套件,通过简单易用的API支持模型预训练、微调、推理等流程。 openMind Library通过一套接口兼容PyTorch和MindSpore等主流框架,同时原生支持昇腾NPU处理器。

如果在国内的话,优先推荐ModelScope和Modelers平台。

如果你的魔法足够稳定足够强大,也可以尝试用Hugging Face。