该存储库记录了 EleutherAI 用于在 GPU 上训练大规模语言模型的库。我们当前的框架基于 NVIDIA 的 Megatron 语言模型,并通过 DeepSpeed 的技术以及一些新颖的优化进行了增强。我们的目标是使这个存储库成为一个集中且可访问的地方,以收集训练大规模自回归语言模型的技术,并加速对大规模训练的研究。该库在学术、工业和政府实验室中得到广泛使用,包括橡树岭国家实验室、CarperAI、Stability AI、Together.ai、韩国大学、卡内基梅隆大学和东京大学等机构的研究人员。在类似的库中,GPT-NeoX 是独一无二的,它支持多种系统和硬件,包括通过 Slurm、MPI 和 IBM Job Step Manager 启动,并且已在 AWS、CoreWeave、ORNL Summit、ORNL Frontier、LUMI 和其他的。
如果您不想从头开始训练具有数十亿参数的模型,那么这可能是错误的库。对于一般推理需求,我们建议您使用支持 GPT-NeoX 模型的 Hugging Face transformers
库。
GPT-NeoX 利用了许多与流行的 Megatron-DeepSpeed 库相同的功能和技术,但大幅提高了可用性和新颖的优化。主要特点包括:
[9/9/2024]我们现在支持通过 DPO、KTO 和奖励建模进行偏好学习
[9/9/2024]我们现在支持与机器学习监控平台 Comet ML 集成
[5/21/2024]我们现在支持具有管道并行性的 RWKV!。请参阅 RWKV 和 RWKV+pipeline 的 PR
[3/21/2024]我们现在支持混合专家 (MoE)
[3/17/2024]我们现在支持 AMD MI250X GPU
[3/15/2024]我们现在支持 Mamba 张量并行!查看公关
[8/10/2023]我们现在支持 AWS S3 的检查点!使用s3_path
配置选项激活(有关更多详细信息,请参阅 PR)
[9/20/2023]自 #1035 起,我们已弃用 Flash Attention 0.x 和 1.x,并将支持迁移到 Flash Attention 2.x。我们认为这不会导致问题,但如果您有特定的用例需要使用最新的 GPT-NeoX 来支持旧闪存,请提出问题。
[8/10/2023]我们的 math-lm 项目对 LLaMA 2 和 Flash Attention v2 提供了实验性支持,该项目将于本月晚些时候上传到上游。
[5/17/2023]修复了一些其他错误后,我们现在完全支持 bf16。
[4/11/2023]我们升级了 Flash Attention 实现,现在支持 Alibi 位置嵌入。
[3/9/2023]我们发布了 GPT-NeoX 2.0.0,这是基于最新 DeepSpeed 构建的升级版本,并将定期同步。
在 2023 年 3 月 9 日之前,GPT-NeoX 依赖 DeeperSpeed,它基于旧版本的 DeepSpeed (0.3.15)。为了迁移到最新的上游 DeepSpeed 版本,同时允许用户访问旧版本的 GPT-NeoX 和 DeeperSpeed,我们为这两个库引入了两个版本:
该代码库主要针对 Python 3.8-3.10 和 PyTorch 1.8-2.0 进行开发和测试。这不是严格要求,其他版本和库组合也可以工作。
要安装其余的基本依赖项,请运行:
pip install -r requirements/requirements.txt
pip install -r requirements/requirements-wandb.txt # optional, if logging using WandB
pip install -r requirements/requirements-tensorboard.txt # optional, if logging via tensorboard
pip install -r requirements/requirements-comet.txt # optional, if logging via Comet
从存储库根目录。
警告
我们的代码库依赖于 DeepSpeed,它是 DeepSpeed 库的分支,并添加了一些更改。我们强烈建议在继续之前使用 Anaconda、虚拟机或其他形式的环境隔离。如果不这样做,可能会导致依赖 DeepSpeed 的其他存储库崩溃。
我们现在通过 JIT 融合内核编译支持 AMD GPU(MI100、MI250X)。融合内核将根据需要构建和加载。为了避免在作业启动期间等待,您还可以对手动预构建执行以下操作:
python
from megatron . fused_kernels import load
load ()
这将自动适应不同 GPU 供应商(AMD、NVIDIA)的构建过程,而无需更改特定于平台的代码。要使用pytest
进一步测试融合内核,请使用pytest tests/model/test_fused_kernels.py
要使用 Flash-Attention,请在./requirements/requirements-flashattention.txt
中安装其他依赖项,并在配置中相应地设置注意类型(请参阅配置)。与对某些 GPU 架构(包括 Ampere GPU(例如 A100s))的常规关注相比,这可以提供显着的加速;有关更多详细信息,请参阅存储库。
NeoX 和 Deep(er)Speed 支持在多个不同节点上进行训练,您可以选择使用各种不同的启动器来编排多节点作业。
一般来说,需要有一个可访问的“主机文件”,格式如下:
node1_ip slots=8
node2_ip slots=8
其中第一列包含设置中每个节点的 IP 地址,插槽数量是该节点可以访问的 GPU 数量。在您的配置中,您必须使用"hostfile": "/path/to/hostfile"
传递主机文件的路径。或者,主机文件的路径可以位于环境变量DLTS_HOSTFILE
中。
pdsh
是默认启动器,如果您使用pdsh
,那么您必须做的所有事情(除了确保您的环境中安装了 pdsh 之外)都是在配置文件中设置{"launcher": "pdsh"}
。
如果使用 MPI,则必须指定 MPI 库(DeepSpeed/GPT-NeoX 目前支持mvapich
、 openmpi
、 mpich
和impi
,尽管openmpi
是最常用和经过测试的),并在配置文件中传递deepspeed_mpi
标志:
{
"launcher" : " openmpi " ,
"deepspeed_mpi" : true
}
正确设置环境和正确的配置文件后,您可以像普通 python 脚本一样使用deepy.py
并使用以下命令启动(例如)训练作业:
python3 deepy.py train.py /path/to/configs/my_model.yml
使用 Slurm 可能会稍微复杂一些。与 MPI 一样,您必须将以下内容添加到您的配置中:
{
"launcher" : " slurm " ,
"deepspeed_slurm" : true
}
如果您无法通过 ssh 访问 Slurm 集群中的计算节点,则需要添加{"no_ssh_check": true}
在很多情况下,上述默认启动选项是不够的
在这些情况下,您将需要修改 DeepSpeed 多节点运行程序实用程序以支持您的用例。总的来说,这些增强功能分为两类:
在这种情况下,您必须将新的多节点运行器类添加到deepspeed/launcher/multinode_runner.py
并将其公开为 GPT-NeoX 中的配置选项。关于我们如何为 Summit JSRun 执行此操作的示例分别位于 DeeperSpeed 提交和 GPT-NeoX 提交中。
我们遇到过许多希望修改 MPI/Slurm 运行命令以进行优化或调试的情况(例如,修改 Slurm srun CPU 绑定或使用等级标记 MPI 日志)。在这种情况下,您必须修改多节点运行器类的get_cmd
方法下的运行命令(例如 OpenMPI 的 mpirun_cmd)。有关我们如何使用 Slurm 和 OpenMPI 为稳定性集群提供优化和排名标记的运行命令的示例,请参阅此 DeeperSpeed 分支
一般来说,您将无法拥有一个固定的主机文件,因此您需要一个脚本来在作业开始时动态生成一个主机文件。使用 Slurm 和每个节点 8 个 GPU 动态生成主机文件的示例脚本是:
#! /bin/bash
GPUS_PER_NODE=8
mkdir -p /sample/path/to/hostfiles
# need to add the current slurm jobid to hostfile name so that we don't add to previous hostfile
hostfile=/sample/path/to/hostfiles/hosts_ $SLURM_JOBID
# be extra sure we aren't appending to a previous hostfile
rm $hostfile & > /dev/null
# loop over the node names
for i in ` scontrol show hostnames $SLURM_NODELIST `
do
# add a line to the hostfile
echo $i slots= $GPUS_PER_NODE >> $hostfile
done
$SLURM_JOBID
和$SLURM_NODELIST
是 Slurm 将为您创建的环境变量。有关在作业创建时设置的可用 Slurm 环境变量的完整列表,请参阅 sbatch 文档。
然后您可以创建一个 sbatch 脚本来启动您的 GPT-NeoX 作业。基于 Slurm 的集群(每个节点有 8 个 GPU)上的基本 sbatch 脚本如下所示:
#! /bin/bash
# SBATCH --job-name="neox"
# SBATCH --partition=your-partition
# SBATCH --nodes=1
# SBATCH --ntasks-per-node=8
# SBATCH --gres=gpu:8
# Some potentially useful distributed environment variables
export HOSTNAMES= ` scontrol show hostnames " $SLURM_JOB_NODELIST " `
export MASTER_ADDR= $( scontrol show hostnames " $SLURM_JOB_NODELIST " | head -n 1 )
export MASTER_PORT=12802
export COUNT_NODE= ` scontrol show hostnames " $SLURM_JOB_NODELIST " | wc -l `
# Your hostfile creation script from above
./write_hostfile.sh
# Tell DeepSpeed where to find our generated hostfile via DLTS_HOSTFILE
export DLTS_HOSTFILE=/sample/path/to/hostfiles/hosts_ $SLURM_JOBID
# Launch training
python3 deepy.py train.py /sample/path/to/your/configs/my_model.yml
然后,您可以使用sbatch my_sbatch_script.sh
开始训练运行
如果您喜欢在容器中运行 NeoX,我们还提供 Dockerfile 和 docker-compose 配置。
运行容器的要求是具有适当的 GPU 驱动程序、最新安装的 Docker 以及安装的 nvidia-container-toolkit。要测试您的安装是否良好,您可以使用他们的“示例工作负载”,即:
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
如果它将运行,您需要在您的环境中导出 NEOX_DATA_PATH 和 NEOX_CHECKPOINT_PATH 以指定您的数据目录以及用于存储和加载检查点的目录:
export NEOX_DATA_PATH=/mnt/sda/data/enwiki8 #or wherever your data is stored on your system
export NEOX_CHECKPOINT_PATH=/mnt/sda/checkpoints
然后,从 gpt-neox 目录中,您可以构建映像并在容器中运行 shell
docker compose run gpt-neox bash
构建后,您应该能够执行以下操作:
mchorse@537851ed67de:~$ echo $(pwd)
/home/mchorse
mchorse@537851ed67de:~$ ls -al
total 48
drwxr-xr-x 1 mchorse mchorse 4096 Jan 8 05:33 .
drwxr-xr-x 1 root root 4096 Jan 8 04:09 ..
-rw-r--r-- 1 mchorse mchorse 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 mchorse mchorse 3972 Jan 8 04:09 .bashrc
drwxr-xr-x 4 mchorse mchorse 4096 Jan 8 05:35 .cache
drwx------ 3 mchorse mchorse 4096 Jan 8 05:33 .nv
-rw-r--r-- 1 mchorse mchorse 807 Feb 25 2020 .profile
drwxr-xr-x 2 root root 4096 Jan 8 04:09 .ssh
drwxrwxr-x 8 mchorse mchorse 4096 Jan 8 05:35 chk
drwxrwxrwx 6 root root 4096 Jan 7 17:02 data
drwxr-xr-x 11 mchorse mchorse 4096 Jan 8 03:52 gpt-neox
对于长时间运行的作业,您应该运行
docker compose up -d
以分离模式运行容器,然后在单独的终端会话中运行
docker compose exec gpt-neox bash
然后,您可以从容器内运行任何您想要的作业。
长时间运行或处于分离模式时的问题包括
如果您更喜欢从 dockerhub 运行预构建的容器映像,则可以使用-f docker-compose-dockerhub.yml
运行 docker compose 命令,例如,
docker compose run -f docker-compose-dockerhub.yml gpt-neox bash
所有功能都应使用deepy.py
启动,它是deepspeed
启动器的包装器。
目前我们提供三个主要功能:
train.py
用于训练和微调模型。eval.py
用于使用语言模型评估工具评估经过训练的模型。generate.py
用于从经过训练的模型中采样文本。可以通过以下方式启动:
./deepy.py [script.py] [./path/to/config_1.yml] [./path/to/config_2.yml] ... [./path/to/config_n.yml]
例如,要启动训练,您可以运行
./deepy.py train.py ./configs/20B.yml ./configs/local_cluster.yml
有关每个入口点的更多详细信息,请分别参阅训练和微调、推理和评估。
GPT-NeoX 参数在传递给 deepy.py 启动器的 YAML 配置文件中定义。我们在配置中提供了一些示例 .yml 文件,显示了各种功能和模型大小。
这些文件通常是完整的,但不是最佳的。例如,根据您的具体 GPU 配置,您可能需要更改一些设置,例如pipe-parallel-size
、 model-parallel-size
来增加或减少并行化程度, train_micro_batch_size_per_gpu
或gradient-accumulation-steps
来修改批量大小相关设置,或zero_optimization
字典来修改优化器状态在工作线程之间的并行化方式。
有关可用功能以及如何配置它们的更详细指南,请参阅配置自述文件,有关每个可能参数的文档,请参阅 configs/neox_arguments.md。
GPT-NeoX 包括多个针对 MoE 的专家实施。要在它们之间进行选择,请指定moe_type
of megablocks
(默认)或deepspeed
。
两者都基于 DeepSpeed MoE 并行框架,该框架支持张量-专家-数据并行。两者都允许您在代币丢弃和无丢弃之间切换(默认,这就是 Megablocks 的设计目的)。 Sinkhorn 路由即将推出!
有关基本完整配置的示例,请参阅 configs/125M-dmoe.yml(对于 Megablocks dropless)或 configs/125M-moe.yml。
大多数与 MoE 相关的配置参数都以moe
为前缀。一些常见的配置参数及其默认值如下:
moe_type: megablocks
moe_num_experts: 1 # 1 disables MoE. 8 is a reasonable value.
moe_loss_coeff: 0.1
expert_interval: 2 # See details below
enable_expert_tensor_parallelism: false # See details below
moe_expert_parallel_size: 1 # See details below
moe_token_dropping: false
DeepSpeed 可以进一步配置以下内容:
moe_top_k: 1
moe_min_capacity: 4
moe_train_capacity_factor: 1.0 # Setting to 1.0
moe_eval_capacity_factor: 1.0 # Setting to 1.0
每个expert_interval
转换器层(包括第一个)都存在一个 MoE 层,因此总共 12 层:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
专家将分为以下几层:
0, 2, 4, 6, 8, 10
默认情况下,我们使用专家数据并行性,因此任何可用的张量并行性( model_parallel_size
)都将用于专家路由。例如,考虑到以下情况:
expert_parallel_size: 4
model_parallel_size: 2 # aka tensor parallelism
对于 32 个 GPU,行为将如下所示:
expert_parallel_size == model_parallel_size
。设置enable_expert_tensor_parallelism
可启用张量专家数据(TED)并行性。解释上述内容的方法是:
expert_parallel_size == 1
或model_parallel_size == 1
。因此请注意 DP 必须能被 (MP * EP) 整除。欲了解更多详情,请参阅 TED 论文。
尚不支持管道并行性 - 即将推出!
可以使用几个预配置的数据集,包括 Pile 中的大多数组件以及 Pile 训练集本身,以便使用prepare_data.py
入口点进行简单的标记化。
EG,使用 GPT2 Tokenizer 下载并标记 enwik8 数据集,将它们保存到./data
您可以运行:
python prepare_data.py -d ./data
或带有 GPT-NeoX-20B 分词器的堆的单个分片 ( pile_subset
)(假设您已将其保存在./20B_checkpoints/20B_tokenizer.json
):
python prepare_data.py -d ./data -t HFTokenizer --vocab-file ./20B_checkpoints/20B_tokenizer.json pile_subset
标记化数据将保存到两个文件中: [data-dir]/[dataset-name]/[dataset-name]_text_document.bin
和[data-dir]/[dataset-name]/[dataset-name]_text_document.idx
。您需要将这两个文件共享的前缀添加到data-path
字段下的训练配置文件中。例如:
" data-path " : " ./data/enwik8/enwik8_text_document " ,
要准备您自己的数据集以使用自定义数据进行训练,请将其格式化为一个大型 jsonl 格式的文件,其中字典列表中的每个项目都是一个单独的文档。文档文本应分组在一个 JSON 键下,即"text"
。不会使用存储在其他字段中的任何辅助数据。
接下来,请确保下载 GPT2 分词器词汇,并从以下链接合并文件:
或者使用 20B 分词器(只需要一个 Vocab 文件):
(或者,您可以使用Tokenizer.from_pretrained()
命令提供可由 Hugging Face 的 tokenizers 库加载的任何 tokenizer 文件)
您现在可以使用tools/datasets/preprocess_data.py
对数据进行预标记,其参数详细信息如下:
usage: preprocess_data.py [-h] --input INPUT [--jsonl-keys JSONL_KEYS [JSONL_KEYS ...]] [--num-docs NUM_DOCS] --tokenizer-type {HFGPT2Tokenizer,HFTokenizer,GPT2BPETokenizer,CharLevelTokenizer} [--vocab-file VOCAB_FILE] [--merge-file MERGE_FILE] [--append-eod] [--ftfy] --output-prefix OUTPUT_PREFIX
[--dataset-impl {lazy,cached,mmap}] [--workers WORKERS] [--log-interval LOG_INTERVAL]
optional arguments:
-h, --help show this help message and exit
input data:
--input INPUT Path to input jsonl files or lmd archive(s) - if using multiple archives, put them in a comma separated list
--jsonl-keys JSONL_KEYS [JSONL_KEYS ...]
space separate listed of keys to extract from jsonl. Default: text
--num-docs NUM_DOCS Optional: Number of documents in the input data (if known) for an accurate progress bar.
tokenizer:
--tokenizer-type {HFGPT2Tokenizer,HFTokenizer,GPT2BPETokenizer,CharLevelTokenizer}
What type of tokenizer to use.
--vocab-file VOCAB_FILE
Path to the vocab file
--merge-file MERGE_FILE
Path to the BPE merge file (if necessary).
--append-eod Append an <eod> token to the end of a document.
--ftfy Use ftfy to clean text
output data:
--output-prefix OUTPUT_PREFIX
Path to binary output file without suffix
--dataset-impl {lazy,cached,mmap}
Dataset implementation to use. Default: mmap
runtime:
--workers WORKERS Number of worker processes to launch
--log-interval LOG_INTERVAL
Interval between progress updates
例如:
python tools/datasets/preprocess_data.py
--input ./data/mydataset.jsonl.zst
--output-prefix ./data/mydataset
--vocab ./data/gpt2-vocab.json
--merge-file gpt2-merges.txt
--dataset-impl mmap
--tokenizer-type GPT2BPETokenizer
--append-eod
然后,您可以在配置文件中添加以下设置来运行训练:
" data-path " : " data/mydataset_text_document " ,
训练是使用deepy.py
启动的,它是 DeepSpeed 启动器的包装器,它在许多 GPU/节点上并行启动相同的脚本。
一般的使用模式是:
python ./deepy.py train.py [path/to/config1.yml] [path/to/config2.yml] ...
您可以传入任意数量的配置,这些配置将在运行时全部合并。
您还可以选择传入配置前缀,这将假定您的所有配置都位于同一文件夹中,并将该前缀附加到其路径中。
例如:
python ./deepy.py train.py -d configs 125M.yml local_setup.yml
这将在所有节点上部署train.py
脚本,每个 GPU 一个进程。工作节点和 GPU 数量在/job/hostfile
文件中指定(请参阅参数文档),或者如果在单节点设置上运行,则可以简单地作为num_gpus
arg 传入。
尽管这并不是绝对必要的,但我们发现在一个配置文件(例如configs/125M.yml
)中定义模型参数并在另一个配置文件(例如configs/local_setup.yml
)中定义数据路径参数很有用。
GPT-NeoX-20B 是在 Pile 上训练的 200 亿参数自回归语言模型。有关 GPT-NeoX-20B 的技术详细信息可以在相关论文中找到。该模型的配置文件可在./configs/20B.yml
中获取,并包含在下面的下载链接中。
Slim 权重 -(无优化器状态,用于推理或微调,39GB)
要从命令行下载到名为20B_checkpoints
的文件夹,请使用以下命令:
wget --cut-dirs=5 -nH -r --no-parent --reject " index.html* " https://the-eye.eu/public/AI/models/GPT-NeoX-20B/slim_weights/ -P 20B_checkpoints
完整权重 -(包括优化器状态,268GB)
要从命令行下载到名为20B_checkpoints
的文件夹,请使用以下命令:
wget --cut-dirs=5 -nH -r --no-parent --reject " index.html* " https://the-eye.eu/public/AI/models/GPT-NeoX-20B/full_weights/ -P 20B_checkpoints
或者可以使用 BitTorrent 客户端下载权重。 Torrent 文件可以在这里下载:slimweights、fullweights。
我们还在整个训练过程中保存了 150 个检查点,每 1,000 步一个。我们正在研究如何最好地大规模服务这些,但与此同时,有兴趣使用部分训练的检查站的人们可以发送电子邮件至 [email protected] 来安排访问。
Pythia Scaling Suite 是一套在 Pile 上训练的模型,范围从 70M 参数到 12B 参数,旨在促进大型语言模型的可解释性和训练动态的研究。有关该项目的更多详细信息以及模型的链接可以在论文中和该项目的 GitHub 上找到。
Polyglot 项目致力于训练强大的非英语预训练语言模型,以促进机器学习领域以外的研究人员能够使用这项技术。 EleutherAI 已经训练并发布了 1.3B、3.8B 和 5.8B 参数韩语语言模型,其中最大的模型在韩语任务上优于所有其他公开可用的语言模型。有关该项目的更多详细信息以及模型的链接可以在此处找到。
对于大多数用途,我们建议通过 Hugging Face Transformers 库部署使用 GPT-NeoX 库训练的模型,该库针对推理进行了更好的优化。
我们支持预训练模型的三种类型的生成:
所有三种类型的文本生成都可以通过python ./deepy.py generate.py -d configs 125M.yml local_setup.yml text_generation.yml
启动,并在configs/text_generation.yml
中设置适当的值。
GPT-NeoX 支持通过语言模型评估工具对下游任务进行评估。
要在评估工具上评估经过训练的模型,只需运行:
python ./deepy.py eval.py -d configs your_configs.yml --eval_tasks task1 task2 ... taskn
其中--eval_tasks
是评估任务列表,后跟空格,例如--eval_tasks lambada hellaswag piqa sciq
。有关所有可用任务的详细信息,请参阅 lm-evaluation-harness 存储库。
GPT-NeoX 仅针对训练进行了大量优化,并且 GPT-NeoX 模型检查点与其他深度学习库不兼容。为了使模型能够轻松加载并与最终用户共享,并进一步导出到各种其他框架,GPT-NeoX 支持检查点转换为 Hugging Face Transformers 格式。
尽管 NeoX 支持许多不同的架构配置,包括 AliBi 位置嵌入,但并非所有这些配置都能清晰地映射到 Hugging Face Transformers 中支持的配置。
NeoX 支持将兼容模型导出到以下架构:
训练一个不适合这些 Hugging Face Transformers 架构之一的模型需要为导出的模型编写自定义建模代码。
要将 GPT-NeoX 库检查点转换为 Hugging Face-loadable 格式,请运行:
python ./tools/ckpts/convert_neox_to_hf.py --input_dir /path/to/model/global_stepXXX --config_file your_config.yml --output_dir hf_model/save/location --precision {auto,fp16,bf16,fp32} --architecture {neox,mistral,llama}
然后要将模型上传到 Hugging Face Hub,请运行:
huggingface-cli login
python ./tools/ckpts/upload.py
并输入请求的信息,包括 HF hub 用户令牌。
NeoX 提供了几个实用程序,用于将预训练的模型检查点转换为可以在库中训练的格式。
GPT-NeoX 中可以加载以下模型或模型系列:
我们提供了两个实用程序,用于将两种不同的检查点格式转换为与 GPT-NeoX 兼容的格式。
要将 Meta AI 分发的 Llama 1 或 Llama 2 检查点从其原始文件格式(可在此处或此处下载)转换为 GPT-NeoX 库,请运行
python tools/ckpts/convert_raw_llama_weights_to_neox.py --input_dir /path/to/model/parent/dir/7B --model_size 7B --output_dir /path/to/save/ckpt --num_output_shards <TENSOR_PARALLEL_SIZE> (--pipeline_parallel if pipeline-parallel-size >= 1)
要将 Hugging Face 模型转换为 NeoX 可加载模型,请运行tools/ckpts/convert_hf_to_sequential.py
。有关更多选项,请参阅该文件中的文档。
除了在本地存储日志之外,我们还为两种流行的实验监控框架提供内置支持:Weights & Biases、TensorBoard 和 Comet
记录我们实验的权重和偏差是一个机器学习监控平台。要使用 wandb 监控您的 gpt-neox 实验:
wandb login
来完成此操作 - 您的跑步将自动记录。./requirements/requirements-wandb.txt
中找到并安装。 ./configs/local_setup_wandb.yml
中提供了示例配置。wandb_group
允许您命名运行组, wandb_team
允许您将运行分配给组织或团队帐户。 ./configs/local_setup_wandb.yml
中提供了示例配置。 我们支持通过tensorboard-dir
字段使用TensorBoard。 TensorBoard 监控所需的依赖项可以在./requirements/requirements-tensorboard.txt
中找到并安装。
Comet 是一个机器学习监控平台。要使用 comet 监控您的 gpt-neox 实验:
comet login
或传递export COMET_API_KEY=<your-key-here>
在运行时链接您的 API 密钥pip install -r requirements/requirements-comet.txt
安装comet_ml
和任何依赖库use_comet: True
启用 Comet。您还可以使用comet_workspace
和comet_project
自定义记录数据的位置。 configs/local_setup_comet.yml
中提供了启用 comet 的完整示例配置。如果您需要提供与基于 MPI 的 DeepSpeed 启动器一起使用的主机文件,您可以将环境变量DLTS_HOSTFILE
设置为指向该主机文件。
我们支持使用 Nsight Systems、PyTorch Profiler 和 PyTorch Memory Profiling 进行分析。
要使用 Nsight Systems 分析,请设置配置选项profile
、 profile_step_start
和profile_step_stop
(请参阅此处了解参数用法,并参阅此处查看示例配置)。
要填充 nsys 指标,请使用以下命令启动训练:
nsys profile -s none -t nvtx,cuda -o <path/to/profiling/output> --force-overwrite true
--capture-range=cudaProfilerApi --capture-range-end=stop python $TRAIN_PATH/deepy.py
$TRAIN_PATH/train.py --conf_dir configs <config files>
然后可以使用 Nsight Systems GUI 查看生成的输出文件:
要使用内置 PyTorch 分析器,请设置配置选项profile
、 profile_step_start
和profile_step_stop
(请参阅此处了解参数用法,并参阅此处查看示例配置)。
PyTorch 分析器会将跟踪信息保存到您的tensorboard
日志目录中。您可以按照此处的步骤在 TensorBoard 中查看这些跟踪。
要使用 PyTorch 内存分析,请设置配置选项memory_profiling
和memory_profiling_path
(有关参数用法,请参阅此处,有关示例配置,请参阅此处)。
使用 memory_viz.py 脚本查看生成的配置文件。运行:
python _memory_viz.py trace_plot <generated_profile> -o trace.html
GPT-NeoX 库被学术界和行业研究人员广泛采用,并移植到许多 HPC 系统上。
如果您发现该库对您的研究有用,请联系我们!我们很乐意将您添加到我们的列表中。
EleutherAI 和我们的合作者已在以下出版物中使用它:
其他研究小组的以下出版物使用该库: