Project Icon

1.5-Pints

快速训练小型语言模型的开源项目

1.5-Pints项目提供了一种快速预训练小型语言模型的方法,目标是在9天内达到与知名AI助手相当的水平。该项目开源了模型架构、训练脚本和工具,包含详细的安装指南、数据准备流程、训练和微调方法,以及模型评估和使用说明。研究人员和开发者可以通过这些资源复制实验并进行进一步的开源开发。

Pints.ai -- 9天内训练出强大的小型语言模型

1.5-Pints

9天内预训练模型的方法,可与苹果OpenELM和微软Phi等人工智能助手相媲美。

本仓库包含由Pints.AI开发的1.5-Pints和0.12-Pint的模型架构、训练脚本和实用工具。通过提供模型的代码库和架构访问,本计划旨在促进Pint的复制、实验和进一步的开源开发。

加入我们的Discord: https://discord.gg/eGTRzDdH

论文与引用

@misc{tan202415pintstechnicalreportpretraining,
      title={1.5-Pints技术报告:数天而非数月的预训练 -- 您的语言模型依赖于高质量数据}, 
      author={Calvin Tan and Jerome Wang},
      year={2024},
      eprint={2408.03506},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2408.03506}, 
}

安装

推荐操作系统

通常只需使用Ubuntu 22.04 LTS x86-64Debian 12也经过测试可以使用。

注意1:不要使用arm64 / aarch64xformers不支持ARM64处理器。

注意2:我们不应使用apt安装系统级CUDA。最好将CUDA安装限制在conda环境内,这样不同的项目可以使用不同的CUDA版本。

安装conda

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
sh Miniconda3-latest-Linux-x86_64.sh

为确保conda命令可用,请执行:

source ~/.bashrc

如果仍然遇到conda: command cannot be found,可以找到安装位置并执行:

注意:此路径假设您使用了默认安装设置。否则,请找到您的安装位置。

source ~/miniconda3/etc/profile.d/conda.sh

克隆此仓库

git clone https://github.com/Pints-App/Pints-Train.git && \
cd Pints-Train

创建conda环境

conda create --prefix ./.conda python=3.10 && \
conda activate ./.conda

注意:请使用Python 3.10。截至目前(2024年2月23日),3.12版本会导致许多问题,而3.11版本尚未经过测试。

安装CUDA工具包

conda install nvidia/label/cuda-12.1.1::cuda-toolkit

安装依赖

pip install -r requirements.txt && \
pip install flash-attn --no-build-isolation && \
pip install -r pretrain/requirements.txt

注意dropout_layer_norm的pip安装可能需要约30分钟的编译时间,具体取决于机器性能。

如果尚未安装git-lfs,请安装

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs

下载pints-ai Expository Prose预训练数据集

cd /path/to/dataset_dir
git clone https://huggingface.co/datasets/pints-ai/Expository-Prose-V1

准备数据集

python -m prepare_dataset.standard_parquet \
--source_path /path/to/dataset_dir  \
--train_val_split_ratio 0.9 \
--max_cores 60 \
--destination_path /path/to/output_dir

请参考prepare_dataset文件夹获取数据集准备脚本。

如果在高核心机器上不会出现内存溢出,则不需要设置max_cores

训练模型

Lightning

fabric run model \
--accelerator=cuda \
--devices=8 \
pretrain/main.py \
--data_dir data/output \
--out_dir ../1.5-pints \
--gpus 8 \
--global_batch_size 512 \
--learning_rate 4e-4 \
--micro_batch_size 8 \
--max_step 96180 \
--warmup_steps 2000 \
--weight_decay 0.1 \
--beta1 0.9 \
--beta2 0.95 \
--grad_clip 1.0  \
--min_lr 4e-5 \
--model_name 1.5-Pints-2k \
--wandb_name <run_name> \
--wandb_project <project_name> \
--tokenizer_dir tokenizer/pints

注意1--devices--gpus必须相同。有关所有可调整的参数,请参见pretrain.pysetup参数。

注意2:使用--model_name选择架构(层数/维度/头数)配置。这必须在lit_gpt/config.py中定义。

注意3:选择micro_batch_size以优化GPU内存使用。到目前为止,一旦开始训练,即使在验证期间也能保持稳定。micro_batch_size不需要是batch_size的整除数。batch_sizeglobal_batch_size / devices得出。

注意4:修改pretrain/main.py中的TRAIN_DATA_CONFIG以决定用于训练的数据集。确保事先已准备好数据集

Wandb

如果要求提供wandb API密钥,可以登录并从以下地址获取:https://wandb.ai/authorize

微调模型

cd finetune && \
pip install -r requirements.txt

转换预训练权重

开始微调之前,需要转换预训练权重:

python convert/convert_pretrained_checkpoint.py --checkpoint_dir path/to/checkpoint --output_dir path/to/output
lightning run model \
--accelerator=cuda \
--devices=8 \
finetune/full.py \
--checkpoint_dir <path to lit_model.pth> \
--out_dir ~/1.5-pints-2k/ep2/step-00045000/finetuned \
--model_name 1.5-Pints-2k \
--gpus 8 \
--train.save_interval 6000 \
--train.global_batch_size 512 \
--train.micro_batch_size 8 \
--train.lr_warmup_steps 1125 \
--train.epoch 5 \
--train.learning_rate 2e-5 \
--train.max_seq_length 2048 \
--train.beta1 0.9 \
--train.beta2 0.95 \
--train.weight_decay 0.1 \
--logger_name wandb \
--tokenizer_dir tokenizer/pints \
--known_data_max_seq_length 2048 \
--wandb_project <project name>

运行直接偏好优化(DPO)

DPO用于微调后的使用。有关执行过程,请参见此处

评估模型

请参见此处

使用模型

将lit模型转换为HuggingFace模型(pytorch和safetensors)

python convert_lit_to_hf.py \
--checkpoint_name lit_model.pth \
--directory ../models/1.5-pints \
--model_name 1.5-Pints-2k \
--output_config=True \
--safetensors=True \
--delete_pytorch_model=True

注意:我们发现使用safetensors文件效果更好。因此,建议使用它而不是pytorch_model.bin

使用huggingface

from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("/model/path")
model = AutoModelForCausalLM.from_pretrained("/model/path")

prompt = '''<|im_start|>user
Do not go gentle into that good night.<|im_end|>
<|im_start|>assistant
'''

tokenized_input = tokenizer.encode(prompt)
tokenized_output = model.generate(tokenized_input)
print(tokenizer.decode(tokenized_output))

代码测试

本代码库附带测试。如果需要进行修改,可以运行这些测试以确保您的修改没有破坏现有代码。

安装测试依赖:

pip install -r requirements.test.txt

运行pytest:

python -m pytest --verbose
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号