Axolotl은 다양한 AI 모델의 미세 조정을 간소화하도록 설계된 도구로, 다양한 구성과 아키텍처를 지원합니다.
특징:
목차
| Axolotl은 미세 조정을 위한 통합 저장소를 제공합니다. 계속해서 Axolotl 질문을 해보세요!! |
fp16/fp32 | 로라 | 클로라 | gptq | 플래시 attn이 있는 gptq | 플래시 attn | xformers attn | |
---|---|---|---|---|---|---|---|
야마 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
미스트랄 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
믹스트랄-MoE | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
믹스트랄8X22 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
피티아 | ✅ | ✅ | ✅ | ❓ | |||
대뇌 | ✅ | ✅ | ✅ | ❓ | |||
btlm | ✅ | ✅ | ✅ | ❓ | |||
mpt | ✅ | ❓ | ❓ | ||||
매 | ✅ | ✅ | ✅ | ❓ | |||
gpt-j | ✅ | ✅ | ✅ | ❓ | ❓ | ||
XGen | ✅ | ❓ | ✅ | ❓ | ❓ | ❓ | ✅ |
파이 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
RWKV | ✅ | ❓ | ❓ | ❓ | ❓ | ❓ | ❓ |
퀀 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
아체 | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
잠바 | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
✅: 지원됨 : 지원되지 않음 ❓: 테스트되지 않음
단 몇 단계만으로 Axolotl을 시작해보세요! 이 빠른 시작 가이드는 기본적인 미세 조정 작업을 설정하고 실행하는 과정을 안내합니다.
요구 사항 : Nvidia GPU( bf16
및 Flash Attention의 경우 Ampere 아키텍처 이상), Python >=3.10 및 PyTorch >=2.3.1.
git clone https://github.com/axolotl-ai-cloud/axolotl
cd axolotl
pip3 install packaging ninja
pip3 install -e ' .[flash-attn,deepspeed] '
# preprocess datasets - optional but recommended
CUDA_VISIBLE_DEVICES= " " python -m axolotl.cli.preprocess examples/openllama-3b/lora.yml
# finetune lora
accelerate launch -m axolotl.cli.train examples/openllama-3b/lora.yml
# inference
accelerate launch -m axolotl.cli.inference examples/openllama-3b/lora.yml
--lora_model_dir= " ./outputs/lora-out "
# gradio
accelerate launch -m axolotl.cli.inference examples/openllama-3b/lora.yml
--lora_model_dir= " ./outputs/lora-out " --gradio
# remote yaml files - the yaml config can be hosted on a public URL
# Note: the yaml config must directly link to the **raw** yaml
accelerate launch -m axolotl.cli.train https://raw.githubusercontent.com/axolotl-ai-cloud/axolotl/main/examples/openllama-3b/lora.yml
docker run --gpus ' "all" ' --rm -it axolotlai/axolotl:main-latest
또는 개발을 위해 현재 파일에서 실행합니다.
docker compose up -d
팁
axolotl을 디버그하고 싶거나 Docker를 개발 환경으로 사용하려는 경우 Docker에 대한 디버깅 가이드 섹션을 참조하세요.
실행할 수 있는 더 강력한 Docker 명령은 다음과 같습니다.
docker run --privileged --gpus ' "all" ' --shm-size 10g --rm -it --name axolotl --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --mount type=bind,src= " ${PWD} " ,target=/workspace/axolotl -v ${HOME} /.cache/huggingface:/root/.cache/huggingface axolotlai/axolotl:main-latest
추가로:
--ipc
및 --ulimit
args를 통해 deepspeed(예: SIGBUS/signal 7 오류가 발생할 수 있음)를 실행할 때 메모리 문제를 방지합니다.--mount
/ -v
args를 통해 다운로드한 HF 데이터(모델 등)와 axolotl 코드 수정 사항을 유지합니다.--name
인수를 사용하면 vscode( Dev Containers: Attach to Running Container...
) 또는 터미널에서 컨테이너를 더 쉽게 참조할 수 있습니다.--privileged
플래그는 컨테이너에 모든 기능을 제공합니다.--shm-size 10g
인수는 공유 메모리 크기를 늘립니다. deepspeed를 사용하는 동안 exitcode: -7
오류가 표시되는 경우 이를 사용하세요.자세한 내용은 NVIDIA 웹사이트에서 확인하세요
Python >= 3.10 설치
안정적인 Python 설치 https://pytorch.org/get-started/locally/
Python 종속성과 함께 Axolotl 설치
pip3 install packaging
pip3 install -e ' .[flash-attn,deepspeed] '
(선택 사항) 게이트 모델/데이터 세트를 사용하려면 Huggingface에 로그인하세요.
huggingface-cli login
Huggingface.co/settings/tokens에서 토큰을 받으세요.
Docker 이미지를 지원하는 클라우드 GPU 제공업체의 경우 axolotlai/axolotl-cloud:main-latest
사용하세요.
sudo apt update
sudo apt install -y python3.10
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
sudo update-alternatives --config python # pick 3.10 if given option
python -V # should be 3.10
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
Pytorch 설치 https://pytorch.org/get-started/locally/
빠른 시작의 지침을 따르세요.
달리다
pip3 install protobuf==3.20.3
pip3 install -U --ignore-installed requests Pillow psutil scipy
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu: $LD_LIBRARY_PATH
cuda 및 pytorch가 설치된 Deeplearning Linux OS를 사용하십시오. 그런 다음 빠른 시작의 지침을 따르세요.
Xla를 제거하려면 아래를 실행하십시오.
pip uninstall -y torch_xla[tpu]
WSL 또는 Docker를 사용하세요!
QuickStart의 설치 방법 대신 아래 방법을 사용하세요.
pip3 install -e '.'
추가 정보: mac.md
이 예제 노트북을 사용해 보세요.
7개 이상의 클라우드(GCP, AWS, Azure, OCI 등)의 GPU 인스턴스(온디맨드 및 스팟 인스턴스 모두)에서 시작하려면 SkyPilot을 사용할 수 있습니다.
pip install " skypilot-nightly[gcp,aws,azure,oci,lambda,kubernetes,ibm,scp] " # choose your clouds
sky check
Axolotl을 사용하여 mistralai/Mistral-7B-v0.1
미세 조정하는 예제 YAML을 가져옵니다.
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/axolotl
하나의 명령을 사용하여 시작하십시오.
# On-demand
HF_TOKEN=xx sky launch axolotl.yaml --env HF_TOKEN
# Managed spot (auto-recovery on preemption)
HF_TOKEN=xx BUCKET= < unique-name > sky spot launch axolotl-spot.yaml --env HF_TOKEN --env BUCKET
퍼블릭 클라우드(GCP, AWS, Azure, Lambda Labs, TensorDock, Vast.ai 및 CUDO)의 GPU 인스턴스(온디맨드 및 스팟 인스턴스 모두)에서 실행하려면 dstack을 사용할 수 있습니다.
아래와 같이 YAML에 작업 설명을 작성합니다.
# dstack.yaml
type : task
image : axolotlai/axolotl-cloud:main-latest
env :
- HUGGING_FACE_HUB_TOKEN
- WANDB_API_KEY
commands :
- accelerate launch -m axolotl.cli.train config.yaml
ports :
- 6006
resources :
gpu :
memory : 24GB..
count : 2
그런 다음 dstack run
명령을 사용하여 작업을 실행하면 됩니다. 스팟 인스턴스를 원할 경우 --spot
옵션을 추가하세요. dstack run
명령은 다중 클라우드 서비스에서 가장 저렴한 가격의 인스턴스를 표시합니다.
pip install dstack
HUGGING_FACE_HUB_TOKEN=xxx WANDB_API_KEY=xxx dstack run . -f dstack.yaml # --spot
더 세부적인 사용 사례를 보려면 공식 dstack 문서와 공식 저장소의 axolotl 예제에 대한 자세한 설명을 참조하세요.
Axolotl은 다양한 데이터 세트 형식을 지원합니다. JSONL을 사용하는 것이 좋습니다. JSONL의 스키마는 사용하려는 작업과 프롬프트 템플릿에 따라 다릅니다. JSONL 대신 각 JSONL 필드에 대한 열이 있는 HuggingFace 데이터세트를 사용할 수도 있습니다.
다양한 데이터 세트 형식을 사용하는 방법에 대한 자세한 내용은 설명서를 참조하세요.
빠른 시작에 대한 예를 참조하세요. 필요에 따라 복제하고 수정하는 것이 좋습니다. 가장 중요한 옵션은 다음과 같습니다.
모델
base_model : ./llama-7b-hf # local or huggingface repo
참고: 코드는 올바른 아키텍처를 로드합니다.
데이터세트
datasets :
# huggingface repo
- path : vicgalle/alpaca-gpt4
type : alpaca
# huggingface repo with specific configuration/subset
- path : EleutherAI/pile
name : enron_emails
type : completion # format from earlier
field : text # Optional[str] default: text, field to use for completion data
# huggingface repo with multiple named configurations/subsets
- path : bigcode/commitpackft
name :
- ruby
- python
- typescript
type : ... # unimplemented custom format
# chat_template https://axolotl-ai-cloud.github.io/axolotl/docs/dataset-formats/conversation.html#chat_template
- path : ...
type : chat_template
chat_template : chatml # defaults to tokenizer's chat_template
# local
- path : data.jsonl # or json
ds_type : json # see other options below
type : alpaca
# dataset with splits, but no train split
- path : knowrohit07/know_sql
type : context_qa.load_v2
train_on_split : validation
# loading from s3 or gcs
# s3 creds will be loaded from the system default and gcs only supports public access
- path : s3://path_to_ds # Accepts folder with arrow/parquet or file path like above. Supports s3, gcs.
...
# Loading Data From a Public URL
# - The file format is `json` (which includes `jsonl`) by default. For different formats, adjust the `ds_type` option accordingly.
- path : https://some.url.com/yourdata.jsonl # The URL should be a direct link to the file you wish to load. URLs must use HTTPS protocol, not HTTP.
ds_type : json # this is the default, see other options below.
로드 중
load_in_4bit : true
load_in_8bit : true
bf16 : auto # require >=ampere, auto will detect if your GPU supports this and choose automatically.
fp16 : # leave empty to use fp16 when bf16 is 'auto'. set to false if you want to fallback to fp32
tf32 : true # require >=ampere
bfloat16 : true # require >=ampere, use instead of bf16 when you don't want AMP (automatic mixed precision)
float16 : true # use instead of fp16 when you don't want AMP
참고: Repo는 4비트 양자화를 수행하지 않습니다.
로라
adapter : lora # 'qlora' or leave blank for full finetune
lora_r : 8
lora_alpha : 16
lora_dropout : 0.05
lora_target_modules :
- q_proj
- v_proj
모든 구성 옵션에 대해서는 이 문서를 참조하세요.
달리다
accelerate launch -m axolotl.cli.train your_config.yml
팁
공개 URL에서 호스팅되는 구성 파일을 참조할 수도 있습니다(예: accelerate launch -m axolotl.cli.train https://yourdomain.com/your_config.yml
미세 조정하기 전에 선택적으로 다음을 사용하여 데이터 세트를 사전 토큰화할 수 있습니다. 이는 대규모 데이터 세트에 권장됩니다.
dataset_prepared_path:
로컬 폴더로 설정합니다.push_dataset_to_hub: hf_user/repo
설정하여 Huggingface에 푸시합니다.--debug
사용하세요. python -m axolotl.cli.preprocess your_config.yml
다음은 여러 GPU를 사용한 훈련을 위해 axolotl에서 사용할 수 있는 옵션입니다. FSDP는 손실 불안정성을 경험할 수 있으므로 DeepSpeed는 현재 권장되는 다중 GPU 옵션입니다.
Deepspeed는 다중 GPU 시스템을 위한 최적화 제품군으로, 일반적으로 GPU의 VRAM에 맞출 수 있는 것보다 훨씬 더 큰 모델을 훈련할 수 있습니다. deepspeed의 다양한 최적화 유형에 대한 자세한 내용은 https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed#what-is-integrated에서 확인할 수 있습니다.
우리는 ZeRO 1단계, 2단계, 3단계에 대한 몇 가지 기본 deepspeed JSON 구성을 제공합니다.
deepspeed : deepspeed_configs/zero1.json
accelerate launch -m axolotl.cli.train examples/llama-2/config.yml --deepspeed deepspeed_configs/zero1.json
fsdp :
- full_shard
- auto_wrap
fsdp_config :
fsdp_offload_params : true
fsdp_state_dict_type : FULL_STATE_DICT
fsdp_transformer_layer_cls_to_wrap : LlamaDecoderLayer
Axolotl은 FSDP 및 QLoRA를 통한 교육을 지원합니다. 자세한 내용은 이 문서를 참조하세요.
WANDB_API_KEY
환경 변수가 설정되어 있는지(권장) 또는 wandb login
사용하여 wandb에 로그인했는지 확인하세요.
wandb_mode :
wandb_project :
wandb_entity :
wandb_watch :
wandb_name :
wandb_log_model :
COMET_API_KEY
환경 변수가 설정되어 있는지(권장) 또는 comet login
으로 wandb에 로그인했는지 확인하세요.
use_comet :
comet_api_key :
comet_workspace :
comet_project_name :
comet_experiment_key :
comet_mode :
comet_online :
comet_experiment_config :
토크나이저의 어휘에는 구분 기호, 시퀀스 끝, 시퀀스 시작과 같은 특수 토큰을 포함하는 것이 중요합니다. 이렇게 하면 토큰화 문제를 방지하고 모델 학습을 개선하는 데 도움이 됩니다. axolotl에서는 다음과 같이 이를 수행할 수 있습니다.
special_tokens :
bos_token : " <s> "
eos_token : " </s> "
unk_token : " <unk> "
tokens : # these are delimiters
- " <|im_start|> "
- " <|im_end|> "
axolotl 구성에 이러한 토큰을 포함하면 axolotl은 이러한 토큰을 토크나이저의 어휘에 추가합니다.
Liger 커널: LLM 교육을 위한 효율적인 Triton 커널
https://github.com/linkedin/Liger-Kernel
Liger(LinkedIn GPU Efficient Runtime) 커널은 LLM 교육을 위해 특별히 설계된 Triton 커널 모음입니다. 다중 GPU 교육 처리량을 효과적으로 20% 늘리고 메모리 사용량을 60% 줄일 수 있습니다. Liger 커널은 잘 구성되어 있으며 FSDP 및 Deepspeed와 모두 호환됩니다.
plugins :
- axolotl.integrations.liger.LigerPlugin
liger_rope : true
liger_rms_norm : true
liger_glu_activation : true
liger_layer_norm : true
liger_fused_linear_cross_entropy : true
Axolotl을 사용하면 빠른 실험을 위해 대화형 터미널 놀이터에 모델을 로드할 수 있습니다. 구성 파일은 훈련에 사용된 것과 동일한 구성 파일입니다.
훈련된 모델의 종류에 따라 적절한 플래그를 추론 명령에 전달합니다.
python -m axolotl.cli.inference examples/your_config.yml --lora_model_dir= " ./lora-output-dir "
python -m axolotl.cli.inference examples/your_config.yml --base_model= " ./completed-model "
cat /tmp/prompt.txt | python -m axolotl.cli.inference examples/your_config.yml
--base_model= " ./completed-model " --prompter=None --load_in_8bit=True
-- Gradio 호스팅 사용
python -m axolotl.cli.inference examples/your_config.yml --gradio
--sample_packing False
사용하고 있고 아래와 유사한 오류가 발생하는 경우 이를 사용하십시오.
RuntimeError: 스택은 각 텐서의 크기가 동일할 것으로 예상하지만 항목 0에서는 [1, 32, 1, 128]을 얻었고 항목 1에서는 [1, 32, 8, 128]을 얻었습니다.
다음 명령은 LORA 어댑터를 기본 모델과 병합합니다. 선택적으로 --lora_model_dir
인수를 전달하여 LORA 어댑터가 저장된 디렉터리를 지정할 수 있습니다. 그렇지 않으면 axolotl 구성 파일의 output_dir
에서 추론됩니다. 병합된 모델은 하위 디렉터리 {lora_model_dir}/merged
에 저장됩니다.
python3 -m axolotl.cli.merge_lora your_config.yml --lora_model_dir= " ./completed-model "
메모리 부족을 방지하려면 gpu_memory_limit
및/또는 lora_on_cpu
구성 옵션을 사용해야 할 수도 있습니다. 여전히 CUDA 메모리가 부족하다면 다음과 같이 시스템 RAM을 병합해 볼 수 있습니다.
CUDA_VISIBLE_DEVICES= " " python3 -m axolotl.cli.merge_lora ...
비록 속도가 매우 느리기 때문에 대신 위의 구성 옵션을 사용하는 것이 좋습니다.
FAQ 및 디버깅 가이드도 참조하세요.
'Cuda out of memory' 오류가 발생하면 훈련 과정 중에 GPU에 메모리가 부족하다는 의미입니다. 해결 방법은 다음과 같습니다.
아래 항목을 줄여주세요.
micro_batch_size
eval_batch_size
gradient_accumulation_steps
sequence_len
도움이 되지 않으면 명령에서 deepspeed와 가속("accelerate launch"를 "python"으로 대체) 없이 실행해 보십시오.
adamw_bnb_8bit를 사용하면 메모리를 절약할 수도 있습니다.
failed (exitcode: -9)
일반적으로 시스템에 시스템 메모리가 부족하다는 의미입니다. 마찬가지로 VRAM이 부족할 때와 동일한 설정을 줄이는 것을 고려해야 합니다. 또한 GPU 업그레이드보다 더 간단한 시스템 RAM 업그레이드를 살펴보세요.
RuntimeError: 스칼라 유형이 Float여야 하는데 Half가 발견되었습니다.
fp16: true
NotImplementedError:
memory_efficient_attention_forward
에 대한 연산자를 찾을 수 없습니다...
Xformers를 꺼보세요.
가속 구성 누락
무시해도 안전합니다.
훈련 중 NCCL 시간 초과
NCCL 가이드를 참조하세요.
다양한 형식의 경우 Axolotl은 문자열을 토큰화한 후 토큰 ID를 연결하여 프롬프트를 구성합니다. 문자열을 사용하지 않고 토큰 ID를 연결하는 이유는 주의 마스크에 대한 정확한 계산을 유지하기 위한 것입니다.
axolotl로 구성된 프롬프트를 디코딩하는 경우 특히 구분 기호와 특수 토큰 주변에서 예상하지 못한 토큰 사이(또는 공백 부족)가 나타날 수 있습니다. 새로운 형식으로 시작할 때는 항상 다음을 수행해야 합니다.
python -m axolotl.cli.preprocess your_config.yml --debug
사용하여 일부 데이터를 구체화한 다음 모델의 토크나이저를 사용하여 처음 몇 행을 디코딩합니다.훈련과 추론 중에 프롬프트가 잘못 정렬되면 모델 성능이 매우 저하될 수 있으므로 이를 확인해 볼 가치가 있습니다. 구체적인 예는 이 블로그 게시물을 참조하세요.
VSCode를 사용한 디버깅을 위한 구성 예와 함께 Axolotl 디버깅에 대한 팁은 이 디버깅 가이드를 참조하세요.
커뮤니티 회원이 도움을 드릴 수 있는 Discord 서버에 가입하세요.
전담 지원이 필요하십니까? 전용 지원 옵션을 알아보려면 ✉️[email protected]로 문의하세요.
Axolotl로 뭔가 멋진 것을 만들고 싶으신가요? 모델 카드에 배지를 추가해 보세요.
[ < img src = " https://raw.githubusercontent.com/axolotl-ai-cloud/axolotl/main/image/axolotl-badge-web.png " alt = " Built with Axolotl " width = " 200 " height = " 32 " /> ] ( https://github.com/axolotl-ai-cloud/axolotl )
Axolotl을 사용하여 구축된 일부 프로젝트와 모델을 확인해 보세요! 커뮤니티 쇼케이스에 추가하고 싶은 모델이 있나요? 모델로 PR을 시작하세요.
오픈 액세스 AI 콜렉티브
PocketDoc 연구소
기여 가이드를 읽어보세요.
버그? 열려 있는 이슈를 확인하고 그렇지 않은 경우 새 이슈를 생성하세요.
PR을 크게 환영합니다 !
빠른 시작 지침과 아래 지침을 실행하여 환경을 설정하세요.
pip3 install -r requirements-dev.txt -r requirements-tests.txt
pre-commit install
# test
pytest tests/
# optional: run against all files
pre-commit run --all-files
지금까지 모든 기여자에게 감사드립니다. Axolotl에 기여하여 오픈 소스 AI 발전을 촉진하도록 도와주세요.
OpenAccess AI Collective는 Winglian, NanoCode012, tmm1, mhenrichsen, casper-hansen, hamelsmu 등과 같은 자원 봉사자들에 의해 운영되며 버그 수정, 커뮤니티 질문에 답변 및 새로운 기능 구현을 통해 우리의 발전을 가속화하는 데 도움을 줍니다. Axolotl은 단위 및 통합 테스트를 실행하고, 커뮤니티 문제를 해결하고, 포상금을 제공하는 데 필요한 컴퓨팅을 위해 후원자의 기부가 필요합니다. axolotl을 좋아한다면 GitHub 후원자, Ko-fi를 통해 프로젝트 후원을 고려하거나 [email protected]로 직접 문의하세요.