AMD OLMo 1B
AMD-OLMo 是由 AMD 在 AMD Instinct™ MI250 GPU 上从头开始训练的一系列 10 亿参数语言模型。
下载量 4,419
发布时间 : 10/31/2024
模型简介
AMD-OLMo 是一个基于 OLMo 架构的 10 亿参数语言模型,经过预训练、监督微调(SFT)和 DPO 对齐等多个阶段训练,具有较高的训练吞吐量和多任务表现。
模型特点
高性能训练
使用 AMD Instinct™ MI250 GPUs 进行训练,具有较高的训练吞吐量(12,200 标记/秒/ GPU)。
多阶段微调
经过预训练、监督微调(SFT)和 DPO 对齐等多个阶段,提升模型性能。
多任务表现出色
在多个标准基准测试中表现优异,具有良好的常识推理、多任务理解和负责任 AI 能力。
模型能力
文本生成
指令遵循
多轮对话
常识推理
多任务理解
使用案例
研究
语言模型研究
用于研究语言模型的性能和行为。
聊天应用
聊天机器人
用于构建多轮对话聊天机器人。
在 MT-Bench 上得分为 4.35(AMD-OLMo-1B-SFT)
指令遵循
指令生成
根据用户指令生成响应。
在 AlpacaEval 1 上胜率为 54.22%(AMD-OLMo-1B-SFT-DPO)
🚀 AMD-OLMo
AMD-OLMo 是由 AMD 在 AMD Instinct™ MI250 GPU 上从头开始训练的一系列 10 亿参数语言模型。所使用的训练代码基于 OLMo。
我们发布了预训练模型、监督微调模型和 DPO 对齐模型,具体如下:
- AMD-OLMo-1B:在 Dolma v1.7 的一个子集上进行预训练,该子集包含 13 万亿个标记。
- AMD-OLMo-1B-SFT:在 Tulu V2 数据集(第一阶段)上进行监督微调(SFT),然后在 OpenHermes-2.5、WebInstructSub 和 Code-Feedback 数据集(第二阶段)上继续微调。
- AMD-OLMo-1B-SFT-DPO:在 UltraFeedback 数据集上使用直接偏好优化(DPO)与人类偏好进行对齐。
🚀 快速开始
本项目提供了一系列语言模型,你可以按照以下步骤快速使用:
- 安装依赖:参考后续的安装指南部分,安装必要的软件和库。
- 运行示例代码:参考使用示例部分,使用提供的代码示例进行模型推理。
✨ 主要特性
- 高性能训练:使用 AMD Instinct™ MI250 GPUs 进行训练,具有较高的训练吞吐量。
- 多阶段微调:经过预训练、监督微调(SFT)和 DPO 对齐等多个阶段,提升模型性能。
- 多任务表现出色:在多个标准基准测试中表现优异,具有良好的常识推理、多任务理解和负责任 AI 能力。
📦 安装指南
在 AMD GPU 上运行 PyTorch
你可以使用 Docker Hub 中的 ROCm Docker 镜像在 AMD GPUs 上运行 PyTorch:
docker pull rocm/pytorch:latest
# 在 Docker 内部
pip install transformers
评估环境设置
# lm-eval-harness
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .
# AlpacaEval
pip install git+https://github.com/tatsu-lab/alpaca_eval
cd alpaca_eval
pip install -e .
# MT-Bench
git clone https://github.com/lm-sys/FastChat.git
cd FastChat
pip install -e ".[model_worker,llm_judge]"
训练环境设置
WORK_DIR="<path_to_your_working_directory>"
cd $WORK_DIR
# 克隆 OLMo 代码库
git clone https://github.com/allenai/OLMo.git --branch v0.3.0
cd OLMo
# 克隆包含重现模型训练文件的 AMD-OLMo 仓库
git clone https://huggingface.co/amd/AMD-OLMo
docker pull rocm/pytorch:latest
docker run -it --network=host --device=/dev/kfd --device=/dev/dri --group-add=video --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --shm-size 8G -v $WORK_DIR/OLMo:/OLMo -w /OLMo rocm/pytorch:latest
# 由于 Docker 已安装 ROCm PyTorch,移除第 17 行
sed -i '17d' pyproject.toml
pip install -e .[all]
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("amd/AMD-OLMo-1B-SFT").to("cuda") # 移除 .to("cuda") 以在 CPU 上加载
tokenizer = AutoTokenizer.from_pretrained("amd/AMD-OLMo-1B-SFT")
prompt = "What is large language model?"
bos = tokenizer.eos_token
template = bos + "<|user|>\n{prompt}\n<|assistant|>\n"
input_text = template.format(prompt=prompt)
inputs = tokenizer([input_text], return_tensors='pt', return_token_type_ids=False).to("cuda")
outputs = model.generate(**inputs, max_new_tokens=1000, do_sample=True, top_k=50, top_p=0.95)
print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
📚 详细文档
模型信息
属性 | 详情 |
---|---|
模型类型 | 基于 OLMo-1B 架构的 10 亿参数语言模型 |
训练数据 | 预训练使用 Dolma v1.7 子集;SFT 使用 Tulu V2、OpenHermes-2.5、WebInstructSub 和 Code-Feedback 等数据集;DPO 使用 UltraFeedback 数据集 |
训练硬件和参数
- 硬件:每个计算节点包含 4 个 AMD Instinct™ MI250 GPUs,预训练 AMD-OLMo-1B 使用 16 个节点。
- 训练吞吐量:12,200 标记/秒/ GPU。
模型架构
AMD-OLMo-1B 基于完全开源的 10 亿版本 OLMo-1B 的模型架构和训练设置,具体参数如下:
参数规模 | 层数 | 头数 | 隐藏层大小 | 上下文长度 | 词汇表大小 |
---|---|---|---|---|---|
12 亿 | 16 | 16 | 2048 | 2048 | 50,280 |
超参数设置
阶段 | 学习率调度 | 峰值学习率 | 热身步数 | 轮数 | 批次大小(标记) |
---|---|---|---|---|---|
预训练 | 余弦 | 4.0e-4 | 2000 | 1 | 4M |
SFT 阶段 1 | 线性 | 2.0e-5 | 200 | 3 | 262K |
SFT 阶段 2 | 线性 | 2.0e-5 | 200 | 3 | 1024K |
DPO | 余弦 | 4.0e-6 | 47 | 1 | 64K |
🔧 技术细节
评估框架
我们使用以下开源评估框架对模型进行评估:
- Language Model Evaluation Harness:用于评估常识推理、多任务理解和负责任 AI 基准。
- AlpacaEval:用于评估聊天模型的指令遵循能力。
- MT-Bench:用于评估聊天模型的多轮对话能力。
评估设置
# lm-eval-harness
HF_MODEL=amd/AMD-OLMo-1B-SFT-DPO
accelerate launch -m lm_eval --model hf \
--model_args pretrained=$HF_MODEL,trust_remote_code=True \
--tasks arc_easy,arc_challenge,hellaswag,piqa,boolq,sciq,winogrande,openbookqa,mmlu,gsm8k_cot,bbh_cot_fewshot,toxigen,truthfulqa,crows_pairs \
--device cuda \
--batch_size 32 \
--output_path ./lm-eval-results/$HF_MODEL
训练数据准备
# 下载预训练数据集
DATA_DIR=./datasets/dolma
mkdir -p $DATA_DIR
PARALLEL_DOWNLOADS="<number_of_parallel_downloads>"
cat "AMD-OLMo/dolma_v1_7_subset.txt" | xargs -n 1 -P $PARALLEL_DOWNLOADS wget -q -P $DATA_DIR
# 准备预训练数据集
NUM_WORKERS="<number_of_workers>"
python scripts/prepare_memmap_dataset.py $DATA_DIR/*.json.gz -o $DATA_DIR/memmap_dataset --workers $NUM_WORKERS
# 下载并准备 SFT 数据集
# 第一阶段 SFT 数据集
python AMD-OLMo/prepare_sft_data.py --output_dir ./datasets/tulu --tokenizer tokenizers/allenai_eleuther-ai-gpt-neox-20b-pii-special.json --dataset tulu
# 第二阶段 SFT 数据集
python AMD-OLMo/prepare_sft_data.py --output_dir ./datasets/OpenHermes_WebInstructSub_CodeFeedBack --tokenizer tokenizers/allenai_eleuther-ai-gpt-neox-20b-pii-special.json --dataset 2nd-phase
模型训练
# 单节点训练
HSA_FORCE_FINE_GRAIN_PCIE=1 OMP_NUM_THREADS=128 NCCL_DEBUG=INFO torchrun --nproc_per_node=8 ./scripts/train.py AMD-OLMo/AMD-OLMo-1B.yaml
# 多节点训练
HSA_FORCE_FINE_GRAIN_PCIE=1 OMP_NUM_THREADS=128 NCCL_DEBUG=INFO torchrun --nnodes=$nnodes --node-rank=$node_rank --master_addr=$master_addr --master_port=$master_port --nproc_per_node=8 ./scripts/train.py AMD-OLMo/AMD-OLMo-1B.yaml
DPO 训练
# 安装 trl 库
git clone https://github.com/huggingface/trl.git -b v0.8.6
# 替换 dpo_trainer.py
cp AMD-OLMo/dpo_trainer.py trl/trl/trainer
pip install -e ./trl
# 安装 alignment-handbook
git clone https://github.com/huggingface/alignment-handbook.git hf-align
# 70769f9 是 2024 年 4 月 11 日的主分支。
cd hf-align && git checkout 70769f9 && cd ..
pip install -e ./hf-align
# 将 AMD OLMo DPO 配方复制到 hf-align/recipes。
cp AMD-OLMo/AMD-OLMo-1B-dpo.yaml hf-align/recipes/
# 准备转换后的 AMD-OLMo SFT Huggingface 模型到 ckpt_dir。
ckpt_dir=amd/AMD-OLMo-1B-SFT
local_tokenizer_dir=${ckpt_dir}
# 设置输出检查点目录。
dpo_ckpt_dir=<your_output_checkpoint_dir>
accelerate launch --config_file hf-align/recipes/accelerate_configs/deepspeed_zero3.yaml \
hf-align/scripts/run_dpo.py hf-align/recipes/AMD-OLMo-1B-dpo.yaml \
--trust_remote_code=true \
--model_name_or_path=${ckpt_dir} \
--tokenizer_name_or_path=${local_tokenizer_dir} \
--output_dir=${dpo_ckpt_dir} \
--num_train_epochs=1 \
--learning_rate=4e-6 \
--beta=0.3 \
--loss_type=sigmoid
主要结果
预训练结果
标准基准测试 | TinyLLaMA-v1.1 (11 亿) | MobiLLaMA-1B (12 亿) | OLMo-1B (12 亿) | OpenELM-1_1B (11 亿) | OLMo-1B-0724-hf (12 亿) | AMD-OLMo-1B (12 亿) |
---|---|---|---|---|---|---|
arc_easy | 55.47 | 56.65 | 57.28 | 55.43 | 56.65 | 63.64 |
arc_challenge | 32.68 | 32.00 | 31.06 | 32.34 | 32.34 | 33.70 |
hellaswag | 61.47 | 61.80 | 62.92 | 64.81 | 66.12 | 63.61 |
piqa | 73.56 | 75.30 | 75.14 | 75.57 | 75.08 | 75.57 |
boolq | 55.99 | 60.83 | 61.74 | 63.58 | 66.18 | 60.58 |
sciq | 89.30 | 88.20 | 87.00 | 90.60 | 92.70 | 93.20 |
winogrande | 59.43 | 59.27 | 59.98 | 61.72 | 61.72 | 61.64 |
openbookqa | 36.80 | 35.40 | 36.20 | 36.20 | 35.60 | 35.80 |
mmlu (0 次射击) | 25.02 | 24.81 | 24.23 | 25.26 | 25.45 | 24.88 |
gsm8k (8 次射击) | 1.82 | 0.00 | 2.50 | 2.81 | 8.95 | 2.88 |
bbh (3 次射击) | 25.63 | 0.00 | 25.63 | 16.77 | 21.67 | 20.95 |
平均 | 47.02 | 44.93 | 47.61 | 47.73 | 49.31 | 48.77 |
指令微调结果
标准基准测试 | TinyLlama-1.1B-Chat-v1.0 (11 亿) | MobiLlama-1B-Chat (12 亿) | OpenELM-1_1B-Instruct (11 亿) | AMD-OLMo-1B-SFT (12 亿) | AMD-OLMo-1B-SFT-DPO (12 亿) |
---|---|---|---|---|---|
arc_easy | 54.42 | 57.41 | 52.44 | 63.68 | 64.31 |
arc_challenge | 32.85 | 34.56 | 37.80 | 37.12 | 37.37 |
hellaswag | 60.40 | 62.51 | 71.29 | 61.63 | 61.91 |
piqa | 74.48 | 75.73 | 75.03 | 74.43 | 74.16 |
boolq | 61.04 | 55.66 | 70.28 | 68.53 | 70.24 |
sciq | 88.40 | 87.10 | 89.50 | 91.20 | 92.10 |
winogrande | 60.54 | 60.77 | 62.19 | 60.22 | 60.62 |
openbookqa | 37.20 | 36.80 | 39.20 | 37.40 | 40.20 |
mmlu | 24.61 | 25.25 | 25.54 | 29.97 | 30.52 |
gsm8k (8 次射击) | 2.81 | 0.23 | 1.82 | 18.20 | 15.77 |
bbh (3 次射击) | 26.83 | 0.00 | 13.40 | 25.17 | 25.45 |
平均 | 47.60 | 45.09 | 48.95 | 51.60 | 52.06 |
聊天基准测试结果
聊天基准测试 | TinyLlama-1.1B-Chat-v1.0 (11 亿) | MobiLlama-1B-Chat (12 亿) | OpenELM-1_1B-Instruct (11 亿) | AMD-OLMo-1B-SFT (12 亿) | AMD-OLMo-1B-SFT-DPO (12 亿) |
---|---|---|---|---|---|
AlpacaEval 1 (胜率) | 50.81 | 34.90 | 37.72 | 50.12 | 54.22 |
AlpacaEval 2 (LC 胜率) | 1.54 | 1.59 | 0.49 | 3.88 | 2.37 |
MTBench | 3.38 | 2.89 | - | 4.35 | 4.10 |
负责任 AI 基准测试结果
负责任 AI 基准测试 | TinyLlama-1.1B-Chat-v1.0 (11 亿) | MobiLlama-1B-Chat (12 亿) | OpenELM-1_1B-Instruct (11 亿) | AMD-OLMo-1B-SFT (12 亿) | AMD-OLMo-1B-SFT-DPO (12 亿) |
---|---|---|---|---|---|
ToxiGen | 41.70 | 37.23 | 42.34 | 39.04 | 39.68 |
crows_pairs | 60.35 | 58.50 | 59.93 | 60.29 | 61.00 |
TruthfulQA-mc2 | 37.92 | 38.46 | 45.84 | 37.45 | 40.06 |
评估
我们使用以下开源评估框架对模型进行评估:
- Language Model Evaluation Harness:用于评估常识推理、多任务理解和负责任 AI 基准。
- AlpacaEval:用于评估聊天模型的指令遵循能力。
- MT-Bench:用于评估聊天模型的多轮对话能力。
评估指标
基准测试 | 指标 |
---|---|
arc_easy | 归一化准确率 |
arc_challenge | 归一化准确率 |
hellaswag | 归一化准确率 |
piqa | 准确率 |
boolq | 准确率 |
sciq | 准确率 |
winogrande | 准确率 |
openbookqa | 归一化准确率 |
mmlu | 准确率 |
gsm8k (8 次射击) | 精确匹配(灵活提取) |
bbh (3 次射击) | 精确匹配 |
ToxiGen | 准确率 |
crows_pairs | PCT 刻板印象 |
TruthfulQA-mc2 | 准确率 |
AlpacaEval 1 (胜率) | 胜率 (chatgpt_fn) |
AlpacaEval 2 (LC 胜率) | 长度控制胜率 (weighted_alpaca_eval_gpt4_turbo) |
MTBench | 单答案评分平均得分(2 轮) |
偏差、风险和限制
⚠️ 重要提示
- 这些模型仅用于研究目的,不适用于需要高事实性、安全关键情况、健康或医疗应用、生成虚假信息、促进有毒对话的用例。
- 模型检查点在没有任何安全保证的情况下提供。用户必须根据各自的用例进行全面评估并实施安全过滤机制。
- 可能可以通过提示使模型生成可能事实不准确、有害、暴力、有毒、有偏见或以其他方式令人反感的内容。即使提示并非有意产生此类输出,也可能会生成此类内容。因此,建议用户在使用模型时保持警惕并进行负责任的思考。
- 模型的多语言能力尚未经过测试,因此可能会误解并在不同语言中生成错误的响应。
📄 许可证
Copyright (c) 2018 - 2024 Advanced Micro Devices, Inc. All Rights Reserved.
本项目遵循 Apache License 2.0 许可协议,你可以在以下链接获取许可证副本: http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据本许可证分发的软件按“原样”分发,不附带任何形式的明示或暗示的保证或条件。请查看许可证以了解特定语言的许可权限和限制。
引用
如果你使用了我们的 AMD-OLMo 模型,请引用以下文献:
@misc{AMD-OLMo,
title = {AMD-OLMo: A series of 1B language models trained from scratch by AMD on AMD Instinct™ MI250 GPUs.},
url = {https://huggingface.co/amd/AMD-OLMo},
author = {Jiang Liu, Jialian Wu, Prakamya Mishra, Zicheng Liu, Sudhanshu Ranjan, Pratik Prabhanjan Brahma, Yusheng Su, Gowtham Ramesh, Peng Sun, Zhe Li, Dong Li, Lu Tian, Emad Barsoum},
month = {October},
year = {2024}
}
Phi 2 GGUF
其他
Phi-2是微软开发的一个小型但强大的语言模型,具有27亿参数,专注于高效推理和高质量文本生成。
大型语言模型 支持多种语言
P
TheBloke
41.5M
205
Roberta Large
MIT
基于掩码语言建模目标预训练的大型英语语言模型,采用改进的BERT训练方法
大型语言模型 英语
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基础模型的蒸馏版本,在保持相近性能的同时更轻量高效,适用于序列分类、标记分类等自然语言处理任务。
大型语言模型 英语
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一个多语言大语言模型,针对多语言对话用例进行了优化,在常见的行业基准测试中表现优异。
大型语言模型 英语
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基于100种语言的2.5TB过滤CommonCrawl数据预训练的多语言模型,采用掩码语言建模目标进行训练。
大型语言模型 支持多种语言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基于Transformer架构的英语预训练模型,通过掩码语言建模目标在海量文本上训练,支持文本特征提取和下游任务微调
大型语言模型 英语
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI发布的开放预训练Transformer语言模型套件,参数量从1.25亿到1750亿,旨在对标GPT-3系列性能,同时促进大规模语言模型的开放研究。
大型语言模型 英语
O
facebook
6.3M
198
1
基于transformers库的预训练模型,适用于多种NLP任务
大型语言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多语言大语言模型系列,包含8B、70B和405B参数规模,支持8种语言和代码生成,优化了多语言对话场景。
大型语言模型
Transformers 支持多种语言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基础版是由Google开发的文本到文本转换Transformer模型,参数规模2.2亿,支持多语言NLP任务。
大型语言模型 支持多种语言
T
google-t5
5.4M
702
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98