前言

本章将介绍如何下载部署运行LLaMA 模型。包括:准备Google Colab计算资源、下载模型数据和安装运行模型。

准备CPU和GPU资源

CPU计算力高但核数量少,善于处理线性序列,而GPU计算力低但核数量多,善于处理并行计算。所示模型训练,首选GPU资源,但价格通常比CPU资源贵。

方式一

报名参加 阿里云 天池大赛 零基础入门Docker-cuda练习场,天池实验室将提供免费的CPU和GPU资源供您使用。

报名成功后,点击 提交结果 。但一直提示 当前不在提交时间内,该方式(2023年7月)已无法使用。

方式二 (能访问Google的前提下)

Google Colab 可以简单理解为在浏览器中编写和执行 Python 代码 + 免费GPU资源。注册登录后,点击 文件 —— 新建笔记本

新建的文件默认是 Jupyter Notebook 格式。我们修改文件名,输入命令,并点击 运行 按钮。此时Google Colab会自动连接后端计算资源,同时可以看到输出结果。

从上面输出结果可以看到,Google Colab已为我们安装了最新稳定版本PyTorch Stable 2.0.1和CUDA 11.8版本,Python版本为3.10.12。当我们执行命令 !nvidia-smi 时,提示执行失败,表明没有加载GPU资源。

加载GPU资源步骤:点击 修改 —— 笔记本设置 ——硬件加速选择 GPU ,默认为T4显卡。若需要使用A100和V100显卡,需要 额外购买

重新执行命令 !nvidia-smi ,可以看到使用T4显卡显存为16G

刚才新建的文件 helloWorld.ipynb 默认保存在Google Drive中,双击它会在Google Colab中打开。同时可以打开 Google Drive ,默认有15G可用空间。

使用限制说明:

  • 只有存放在个人Google Drive中文件才能长久保存,存放于运行时分配的实例空间下的资料,在释放后会自动销毁
  • 免费版 Colab 中,单个Jupyter Notebook笔记最长可以运行 12 小时

使用建议:

  • 训练后数据保存到Google Drive
  • 数据集压缩后上传到Google Drive,挂载谷歌云盘的之后,将数据集解压到运行实例空间
  • 完成工作后关闭 Colab 标签页或断开与运行时的连接,并在没有实际工作需求时避免使用 GPU
  • 训练代码必须支持“断点续传”能力,简单来说就是必须定义checkpoint相关功能的函数;假设训练完第n个epoch后掉线,模型能够从第n+1个epoch继续训练而不必从头开始

方式三

购买公有云GPU资源,P40显卡 24GB显存 70元/15天

准备模型

下载LLaMA模型代码仓库

[点击这里] 下载LLaMA模型代码仓库,将 **llama-main.zip** 上传到上一节准备好的CPU和GPU资源,例如:Google Colab或公有云资源。下面以Google Colab为例。

点击左侧 文件图标,此时Google Colab会自动连接并分配资源。

点击 连接云端硬盘会连接到Google Drive并显示一个 drive 目录。将 llama-main.zip 拖动上传到 drive/MyDrive 目录。

执行下面命令

1
2
3
4
5
6
7
8
9
10
11
#解压
!unzip /content/drive/MyDrive/llama-main.zip -d /content

#切换到解压后的目录
import os
os.chdir("/content/llama-main")
!ls
!pwd

#或者
%cd /content/llama-main

下载LLaMA模型权重

填写申请表,申请通过后邮箱会收到通知邮件。一般2个工作日内回复。

也可以直接使用下方链接,直接下载到Google Drive。注意不要下载到分配的资源里,因为断开分配的资源后文件会销毁。连接到Google Drive后,在 drive/MyDrive 下新建文件夹 llama,执行下面命令

1
2
3
4
5
6
7
8
9
#切换目录
%cd /content/drive/MyDrive/llama

#下载到Google Drive
!wget https://agi.gpt4.org/llama/LLaMA/tokenizer.model
!wget https://agi.gpt4.org/llama/LLaMA/tokenizer_checklist.chk
!wget https://agi.gpt4.org/llama/LLaMA/7B/params.json
!wget https://agi.gpt4.org/llama/LLaMA/7B/checklist.chk
!wget https://agi.gpt4.org/llama/LLaMA/7B/consolidated.00.pth #约13GB

安装依赖和运行

安装依赖

1
2
3
4
5
6
7
#安装依赖
%cd /content/llama-main
!pip install -r requirements.txt
!pip install -e .

#从Google Drive复制模型数据到资源实例(可选)
!cp -a /content/drive/MyDrive/llama /content/

运行模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#运行模型
!torchrun --nproc_per_node 1 example.py --ckpt_dir /content/drive/MyDrive/llama --tokenizer_path /content/drive/MyDrive/llama/tokenizer.model

#报错信息如下:
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: -9) local_rank: 0 (pid: 3702) of binary: /usr/bin/python3
Traceback (most recent call last):
File "/usr/local/bin/torchrun", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.10/dist-packages/torch/distributed/elastic/multiprocessing/errors/__init__.py", line 346, in wrapper
return f(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/torch/distributed/run.py", line 794, in main
run(args)
File "/usr/local/lib/python3.10/dist-packages/torch/distributed/run.py", line 785, in run
elastic_launch(
File "/usr/local/lib/python3.10/dist-packages/torch/distributed/launcher/api.py", line 134, in __call__
return launch_agent(self._config, self._entrypoint, list(args))
File "/usr/local/lib/python3.10/dist-packages/torch/distributed/launcher/api.py", line 250, in launch_agent
raise ChildFailedError(
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
=====================================================
example.py FAILED
-----------------------------------------------------
Failures:
<NO_OTHER_FAILURES>
-----------------------------------------------------
Root Cause (first observed failure):
[0]:
time : 2023-07-11_07:06:27
host : 97e79a65d438
rank : 0 (local_rank: 0)
exitcode : -9 (pid: 3702)
error_file: <N/A>
traceback : Signal 9 (SIGKILL) received by PID 3702
=====================================================

报错说明:

  • 将模型数据从Google Drive复制到分配资源实例再运行,报同样错误
  • 将模型数据分consolidated.00.pth和params.json,放到单独的文件夹中再运行,报同样错误
  • 观察模型运行时Google Cola资源使用情况,在模型加载过程中,当12G内存使用率接近100%时发生报错,初步判段是内存不足导致上述错误

小结

本章完成了LLaMA 模型相关数据的下载和环境部署,但由于Google Colab分配的免费内存资源不足问题导致未成功运行。下一章将尝试在公有云环境下运行LLaMA 模型。

相关链接