llamafactory使用qlora训练

llamafactory使用qlora训练

1.环境搭建

复制代码
conda create -n qlora python=3.10 -y
conda activate qlora

# 克隆LLaMA-Factory仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git

# 进入仓库目录
cd LLaMA-Factory

# 切换到0.9.4版本
git checkout v0.9.4

pip install -e .

2.开始训练

2.1找到训练的最大批次

不启动qlora找到训练的刚好"out of memory"的批次,然后再启动qlora进行量化训练。

每次开始训练时要更改输出目录。

2.使用qlora进行训练

3.导出环境包版本信息

3.1导出环境信息

首先激活要导出的 Conda 环境,命令如下(将your_environment_name替换为实际环境名称):

复制代码
conda activate your_environment_name

然后导出环境依赖信息,生成environment.yml文件,命令如下:

复制代码
conda env export > /workspace/qlora-environment.yml 

qlora-environment.yml

复制代码
name: qlora
channels:
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - bzip2=1.0.8=h4bc722e_7
  - ca-certificates=2025.8.3=hbd8a1cb_0
  - ld_impl_linux-64=2.44=h1423503_1
  - libexpat=2.7.1=hecca717_0
  - libffi=3.4.6=h2dba641_1
  - libgcc=15.1.0=h767d61c_4
  - libgcc-ng=15.1.0=h69a702a_4
  - libgomp=15.1.0=h767d61c_4
  - liblzma=5.8.1=hb9d3cd8_2
  - libnsl=2.0.1=hb9d3cd8_1
  - libsqlite=3.50.4=h0c1763c_0
  - libuuid=2.38.1=h0b41bf4_0
  - libxcrypt=4.4.36=hd590300_1
  - libzlib=1.3.1=hb9d3cd8_2
  - ncurses=6.5=h2d0b736_3
  - openssl=3.5.2=h26f9b46_0
  - pip=25.2=pyh8b19718_0
  - python=3.10.18=hd6af730_0_cpython
  - readline=8.2=h8c095d6_2
  - setuptools=80.9.0=pyhff2d567_0
  - tk=8.6.13=noxft_hd72426e_102
  - wheel=0.45.1=pyhd8ed1ab_1
  - pip:
      - accelerate==1.7.0
      - aiofiles==23.2.1
      - aiohappyeyeballs==2.6.1
      - aiohttp==3.12.15
      - aiosignal==1.4.0
      - altair==5.5.0
      - annotated-types==0.7.0
      - antlr4-python3-runtime==4.9.3
      - anyio==4.10.0
      - async-timeout==5.0.1
      - attrs==25.3.0
      - audioread==3.0.1
      - av==15.0.0
      - bitsandbytes==0.47.0
      - certifi==2025.8.3
      - cffi==1.17.1
      - charset-normalizer==3.4.3
      - click==8.2.1
      - contourpy==1.3.2
      - cycler==0.12.1
      - datasets==3.1.0
      - decorator==5.2.1
      - dill==0.3.8
      - docstring-parser==0.17.0
      - einops==0.8.1
      - exceptiongroup==1.3.0
      - fastapi==0.116.1
      - ffmpy==0.6.1
      - filelock==3.19.1
      - fire==0.7.1
      - fonttools==4.59.1
      - frozenlist==1.7.0
      - fsspec==2024.9.0
      - gradio==5.31.0
      - gradio-client==1.10.1
      - groovy==0.1.2
      - h11==0.16.0
      - hf-transfer==0.1.9
      - hf-xet==1.1.7
      - httpcore==1.0.9
      - httpx==0.28.1
      - huggingface-hub==0.34.4
      - idna==3.10
      - importlib-resources==6.5.2
      - jinja2==3.1.6
      - joblib==1.5.1
      - jsonschema==4.25.0
      - jsonschema-specifications==2025.4.1
      - kiwisolver==1.4.9
      - lazy-loader==0.4
      - librosa==0.11.0
      - llamafactory==0.9.4.dev0
      - llvmlite==0.44.0
      - markdown-it-py==4.0.0
      - markupsafe==2.1.5
      - matplotlib==3.10.5
      - mdurl==0.1.2
      - modelscope==1.29.0
      - mpmath==1.3.0
      - msgpack==1.1.1
      - multidict==6.6.4
      - multiprocess==0.70.16
      - narwhals==2.1.2
      - networkx==3.4.2
      - numba==0.61.2
      - numpy==1.26.4
      - nvidia-cublas-cu12==12.8.4.1
      - nvidia-cuda-cupti-cu12==12.8.90
      - nvidia-cuda-nvrtc-cu12==12.8.93
      - nvidia-cuda-runtime-cu12==12.8.90
      - nvidia-cudnn-cu12==9.10.2.21
      - nvidia-cufft-cu12==11.3.3.83
      - nvidia-cufile-cu12==1.13.1.3
      - nvidia-curand-cu12==10.3.9.90
      - nvidia-cusolver-cu12==11.7.3.90
      - nvidia-cusparse-cu12==12.5.8.93
      - nvidia-cusparselt-cu12==0.7.1
      - nvidia-nccl-cu12==2.27.3
      - nvidia-nvjitlink-cu12==12.8.93
      - nvidia-nvtx-cu12==12.8.90
      - omegaconf==2.3.0
      - orjson==3.11.2
      - packaging==25.0
      - pandas==2.3.1
      - peft==0.15.2
      - pillow==10.4.0
      - platformdirs==4.3.8
      - pooch==1.8.2
      - propcache==0.3.2
      - protobuf==6.32.0
      - psutil==7.0.0
      - pyarrow==21.0.0
      - pycparser==2.22
      - pydantic==2.10.6
      - pydantic-core==2.27.2
      - pydub==0.25.1
      - pygments==2.19.2
      - pyparsing==3.2.3
      - python-dateutil==2.9.0.post0
      - python-multipart==0.0.20
      - pytz==2025.2
      - pyyaml==6.0.2
      - referencing==0.36.2
      - regex==2025.7.34
      - requests==2.32.4
      - rich==14.1.0
      - rpds-py==0.27.0
      - ruff==0.12.9
      - safehttpx==0.1.6
      - safetensors==0.5.3
      - scikit-learn==1.7.1
      - scipy==1.15.3
      - semantic-version==2.10.0
      - sentencepiece==0.2.1
      - shellingham==1.5.4
      - shtab==1.7.2
      - six==1.17.0
      - sniffio==1.3.1
      - soundfile==0.13.1
      - soxr==0.5.0.post1
      - sse-starlette==3.0.2
      - starlette==0.47.2
      - sympy==1.14.0
      - termcolor==3.1.0
      - threadpoolctl==3.6.0
      - tiktoken==0.11.0
      - tokenizers==0.21.1
      - tomlkit==0.12.0
      - torch==2.8.0
      - tqdm==4.67.1
      - transformers==4.55.0
      - triton==3.4.0
      - trl==0.9.6
      - typer==0.16.0
      - typing-extensions==4.14.1
      - typing-inspection==0.4.1
      - tyro==0.8.14
      - tzdata==2025.2
      - urllib3==2.5.0
      - uvicorn==0.35.0
      - websockets==11.0.3
      - xxhash==3.5.0
      - yarl==1.20.1
prefix: /root/miniforge3/envs/qlora

3.2导出环境基本信息

若只需快速迁移或记录环境基本信息,可使用以下命令导出当前环境中安装的所有包和版本号到package-list.txt文件:

复制代码
conda list --export > package-list.txt

4.导入环境信息

4.1根据environment.yml文件创建环境

将environment.yml文件复制到目标机器上,进入该文件所在目录,执行以下命令创建环境:

复制代码
conda env create -f environment.yml

创建完成后,可使用以下命令激活新环境(将your_environment_name替换为实际环境名称):

复制代码
conda activate your_environment_name

4.2根据package-list.txt文件安装包

将package-list.txt文件复制到目标机器上,进入文件所在目录,执行以下命令安装包:

复制代码
conda install --file package-list.txt