分享

llama2 保姆级windows环境配置,训练,部署及常见问题解决方法

 netouch 2024-05-15 发布于北京

机器人迈克猫 已于 2024-03-27 15:50:14 修改
阅读量4k 收藏 43
点赞数 32
分类专栏: LLM大语言模型 文章标签: llama python windows
于 2024-01-05 15:44:54 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

业务需要开始研究LLM,并且二次开发用到我们的业务上。

罗嗦几句,我从开始看LLM到配起来训练总共花了两个礼拜时间,看了不下20个视频教程和100篇博客教程,没有哪一个教程是能够从头到尾配置完没有差错的跑起来的,真的呼吁一下大家提高一下教程的质量,自己验证完之后再发布,有错误及时更新或者下线。

以下正式开始配置

1. 环境

1.1 window11

1.2 nvdia 4080或4090显卡,(这里有坑,后面再说 )

2. 根据显卡安装cuda和cudnn

具体看我的另一篇博客(我看的LLM教程基本都没写这一步),这一步是需要用nvida显卡训练必须的一步,还好我以前做过图像识别,知道pytorch需要安装cuda

Windows+Nvdia显卡配置Tensorflow_nvidia-tensorflow-CSDN博客

3. clone llama2-recipes项目

3.1  llama2-recipes是llama2用来微调和二次开发的一个仓库,我之前还跟其他教程用过其他的像mlc-chat这些已经封装好的仓库,我建议如果想二次开发的话还是用这种底层原生的库,用第三方的毕竟被加了一层东西,改起来不灵活

git clone https://github.com/facebookresearch/llama-recipes .

GitHub - facebookresearch/llama-recipes: Examples and recipes for Llama 2 model

3.2 安装虚拟环境(基操,不多说)

python -m venv [env folder]

3.3 安装依赖包(敲黑板,注意这里有大坑)

网上教程都是pip install -r requirement.txt直接无脑安装,爽是很爽,但是基本跑不通,我们先来看一下requirement.txt这个文件内容

这里有两个坑。

第一是torch的版本要区分cpu和gpu,并且要和其他库以及自身的显卡兼容,无脑装大概率会安装cpu的版本,你会发现你的模型会跑在cpu上而不是gpu上,你可以用以下代码确认以下是否跑在了gpu上

  1. import torch
  2. print(torch.__version__)
  3. x = torch.rand(5, 3)
  4. print(x)
  5. print(torch.cuda.is_available())

第二是bitsandbytes这个库,就因为这个库我搞了一天,看一下他的说明,这个库是不支持windows的!!!!!!

如果直接装,大概率你会碰到这个问题(忘记截图了)

  1. runtimeerror:
  2. cuda setup failed despite GPU being available, Please run the following command to get more information:
  3. ...

大概就是说cuda找不到之类的。网上有五花八门的方法,比如安装bitsandbytes-windows,还比如自己编译bitsandbytes,我不清楚当时那些方法有没有效,但是现在统统无效处理。

现在开始讲正确的做法:

3.3.1 安装pytorch,具体看我另一篇博客

YOLO安装(Nvdia GPU)-CSDN博客

3.3.2 安装bitsandbytes

这个是搜到的windows可用版本,可以直接pip安装

bitsandbytesforwindows资源-CSDN文库

3.3.3 修改requirements.txt文件,删除torch和bitsandbytes两项,接着pip install -r requirements安装其他依赖,至此,环境安装完成

4.  下载llama2模型

这一块怎么下载我就不多说了,主要就是需要去meta和HuggingFace注册账号,接着就可以下载模型了

huggingface_meta_llama2()

训练

1. 准备数据集

1.1 可以下载或者自己准备,比如使用GuanacoDataset数据集

https:///datasets/JosephusCheung/GuanacoDataset

1.2  我们只需要使用其中的一份数据就好了,比如选取guanaco_non_chat-utf-8.json,将文件拷贝到llama_recipes/datasets下,并更名为alpaca_data.json,程序会自己找到他。

2. 开始训练

2.1 训练

网上随便一搜是一大串莫名其妙的命令,然后就说开始练吧,同样,大概率是跑不起来的(因为我都试过,我真是服了),这里送上保姆级教学。

敲黑板!!!!训练的关键是llama_recipes\configs\training.py这个文件,抓到这个根了,根本不用写那些长不拉吉奇奇怪怪的命令,我们看一下这个文件里有什么,以及修改方法

  1. # Copyright (c) Meta Platforms, Inc. and affiliates.
  2. # This software may be used and distributed according to the terms of the Llama 2 Community License Agreement.
  3. from dataclasses import dataclass
  4. @dataclass
  5. class train_config:
  6. model_name: str="C:/install11/lama-recipes/Llama-2-7b-hf" #默认为"PATH/to/LLAMA/7B",改为自己的模型文件夹 C:\install11\llama-recipes\Llama-2-7b-hf
  7. enable_fsdp: bool=False
  8. low_cpu_fsdp: bool=False
  9. run_validation: bool=True
  10. batch_size_training: int=1 # 根据自己情况填写
  11. batching_strategy: str="packing"
  12. context_length: int=4096
  13. gradient_accumulation_steps: int=1
  14. gradient_clipping: bool = False
  15. gradient_clipping_threshold: float = 1.0
  16. num_epochs: int=1 # 根据自己情况填写
  17. num_workers_dataloader: int=1
  18. lr: float=1e-4
  19. weight_decay: float=0.0
  20. gamma: float= 0.85
  21. seed: int=42
  22. use_fp16: bool=True
  23. mixed_precision: bool=True
  24. val_batch_size: int=1
  25. dataset = "alpaca_dataset" # 默认为samsum_dataset,改为alpaca_dataset
  26. peft_method: str = "lora" # 需要lora
  27. use_peft: bool=True # 默认为false,请改为true
  28. output_dir: str = "C:/install11/llama-recipes-main/lora" # 默认为"PATH/to/save/PEFT/model",改为自己的文件夹C:/install11/llama-recipes-main/lora
  29. freeze_layers: bool = False
  30. num_freeze_layers: int = 1
  31. quantization: bool = True # 默认为false,改为true
  32. one_gpu: bool = False
  33. save_model: bool = True
  34. dist_checkpoint_root_folder: str="PATH/to/save/FSDP/model"
  35. dist_checkpoint_folder: str="fine-tuned"
  36. save_optimizer: bool=False
  37. use_fast_kernels: bool = False
  38. save_metrics: bool = False

改完以后保存,然后输入以下命令,就开始训练了,根本不需要写那些臭长臭长的命令

python.exe -m llama_recipes.finetuning

2.2 训练过程中的问题

问题1:大概率会碰到OOM问题,硬件的瓶颈主要在VRAM,我在4090的卡上VRAM基本保持在这个情况,所以碰到OOM的问题,就换机器吧,网上有一些优化的方法,但实测,没什么效果,硬件不行就是不行。

问题2:如果用的是跟我一样的数据集,那么在读取的时候会碰到编码问题,需要在报错的代码行修改源码,增加读取的编码方式为'utf-8'

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多