由于机器在客户环境,不能联外网,需要自己准备各种文件拷贝上传,比开放网络要更麻烦一些,记录下过程。
机器:
8卡A100(40GB)单机
docker和nivida-docker
驱动离线安装
模型:
LLaMA:(如过期加wx联系)
链接:https://pan.baidu.com/s/1wJvMgl8Xkp-I0GfCJi_dDQ?pwd=c7qd 提取码:c7qd 复制这段内容后打开百度网盘手机App,操作更方便哦
1. 模型权重准备
将llama和cn_alpaca和cn_llama的权重拷贝到离线A100机器上
llama权重
/data/models/llama/
- tokenizer.model # tokenizer文件
cn_alpaca权重
/data/models/llama/cn_alpaca/33B
- adapter_config.json # LoRA权重配置文件
- adapter_model.bin # LoRA权重文件
- special_tokens_map.json # special_tokens_map文件
- tokenizer_config.json # tokenizer配置文件
- tokenizer.model # tokenizer文件
check sha256
2. 环境准备
制作镜像,下载镜像,拷贝到A100服务器,恢复镜像
git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca
vi requirements.txt
torch==1.13.1
peft==0.3.0
transformers==4.28.1
sentencepiece==0.1.97
protobuf==3.19.0
cpm_kernels
gradio
mdtex2html
accelerate
sentencepiece==0.1.97
numpy==1.24.3
pyzmq==18.1.1
vi Dockerfile
FROM cuda_python:3.9.13-gpu
LABEL org.opencontainers.image.authors="lisiyu@haizhi.com"
WORKDIR /app
COPY requirements.txt .
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install --no-cache-dir -r requirements.txt
COPY . .
docker build -t haizhi/llama:cn_llama_alpaca .
docker images
docker save e78657ebfd4f > /data/lsy/cn_llama_alpaca.tar
docker load < cn_llama_alpaca.tar
docker images
docker tag a586dxxxxx haizhi/llama:cn_llama_alpaca
docker images
3. 微调训练
依赖安装docker和nivida-docker
nvidia-docker run --name llama33b --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \
--rm -it \
-v /data/models/llama:/app/original-weights \
--security-opt seccomp=unconfined \
haizhi/llama:cn_llama_alpaca bash
测试
echo "import torch" > test.py
echo "print(torch.cuda.is_available())" >> test.py
python3 test.py
True
转换模型格式(7分钟)
python3 transformers/src/tranformers/models/llama/convert_llama_weights_to_hf.py --input_dir /app/original-weights --model_size 30B --output_dir /app/original-weights/30B_hf
LoRA权重合并(15分钟)
python3 scripts/merge_llama_with_chinese_lora.py --base_model original-weights/30B_hf --lora_model original-weights/cn_alpaca/33B --output_type huggingface --output_dir original/cn_llama_alpaca/33B
大概33B的模型合并共占用11GB gpu,下图中另外的计算任务是65B的训练
测试
python3 scripts/inference/inference_hf.py --base_model original-weights/cn_llama_alpaca/7B --with_prompt --interactive --gpus 4,5,6,7
推理:A100 x 8卡的机器,启动推理+gradio,33B的llama fp16精度占用了77GB显存
量化推理:33B的int8占用了37GB显存
问题
torch.cuda.OutOfMemoryError: CUDA out of memory.
因为0卡gpu内存不够了,改为7卡。