mistral-finetune
은 Mistral 모델의 메모리 효율성과 성능 미세 조정을 가능하게 하는 경량 코드베이스입니다. 이는 대부분의 가중치가 동결되고 하위 행렬 섭동 형태의 추가 가중치 중 1~2%만 훈련되는 훈련 패러다임인 LoRA를 기반으로 합니다.
효율성을 극대화하려면 A100 또는 H100 GPU를 사용하는 것이 좋습니다. 코드베이스는 다중 GPU 단일 노드 교육 설정에 최적화되어 있지만 7B와 같은 소형 모델의 경우 단일 GPU로 충분합니다.
메모
이 저장소의 목표는 Mistral 모델을 미세 조정하기 위한 간단한 안내 시작점을 제공하는 것입니다. 따라서 이는 상당히 독선적이며(특히 데이터 형식화와 관련하여) 여러 모델 아키텍처 또는 하드웨어 유형을 포괄적으로 다루는 것을 목표로 하지 않습니다. 보다 일반적인 접근 방식을 보려면 torchtune과 같은 다른 훌륭한 프로젝트를 확인해 보세요.
2024년 8월 13일 : Mistral Large v2가 이제 mistral-finetune
과 호환됩니다!
다른 모델에 비해 낮은 학습률을 사용하는 것이 좋습니다. 예를 들어 lr=1e-6은 대부분의 경우에 잘 작동합니다.
Mistral-Large v2를 미세 조정하려면 더 큰 모델 크기로 인해 훨씬 더 많은 메모리가 필요합니다. 지금은 seq_len
<= 8192로 설정하세요.
여기에서 123B Instruct를 다운로드하고 model_id_or_path
다운로드한 체크포인트 디렉터리로 설정하세요.
2024년 7월 19일 : Mistral Nemo가 이제 mistral-finetune
과 호환됩니다!
7B v3과 동일한 하이퍼파라미터를 사용하는 것이 좋습니다.
미세 조정 Mistral-Nemo에는 현재 CE 손실의 최대 메모리 요구 사항을 급증시키는 더 큰 어휘 크기로 인해 훨씬 더 많은 메모리가 필요합니다(여기에 향상된 CE 손실이 곧 추가될 예정입니다). 지금은 seq_len
<= 16384로 설정하세요.
pip install --upgrade mistral-common
실행하여 Tekkenizer( >=1.3.1
)를 지원하는 버전을 확보하세요.
여기에서 12B Base 또는 Instruct를 다운로드하고 model_id_or_path
다운로드한 체크포인트 디렉터리로 설정하세요.
Mistral LoRA 미세 조정을 시작하려면 다음 단계를 따르세요.
다음 저장소를 복제하세요.
cd $HOME && git clone https://github.com/mistralai/mistral-finetune.git
필요한 모든 종속성을 설치합니다.
cd mistral-finetune pip install -r requirements.txt
여기에서 다운로드할 수 있는 공식 Mistral 모델 중 하나를 미세 조정하는 것이 좋습니다.
모델 | 링크 | 체크섬 |
---|---|---|
7B 베이스 V3 | 7B 베이스 | 0663b293810d7571dad25dae2f2a5806 |
7B 지시 v3 | 7B 지시 v3 | 80b71fcb6416085bcb4efad86dfb4d52 |
8x7B 베이스 V1 | 8x7B 베이스 | (HF링크) |
8x7B 지시 V1 | 8x7B 지시 | 8e2d3930145dc43d3084396f49d38a3f |
8x22 지시 V3 | 8x22 지시 | 471a02a6902706a2f1e44a693813855b |
8x22B 베이스 V3 | 8x22B 베이스 | a2fa75117174f87d1197e3a4eb50371a |
12B 지시하다 | 12B 지시(미스트랄-네모) | 296fbdf911cb88e6f0be74cd04827fe7 |
12B 베이스 | 12 베이스(미스트랄-네모) | c5d079ac4b55fc1ae35f51f0a3c0eb83 |
미스트랄 라지 2 | 123B 지시(대형 v2) | fc602155f9e39151fba81fcaab2fa7c4 |
중요 공지 : 8x7B Base V1 및 8x7B Instruct V1의 경우 미세 조정에 앞서 v3 토크나이저를 사용하고 어휘 크기를 32768로 확장해야 합니다. 이 프로세스에 대한 자세한 지침은 "모델 확장" 섹션을 참조하세요.
예를 들어 7B 기반 모델을 다운로드하려면 다음 명령을 실행할 수 있습니다.
mkdir -p ~/${HOME}/mistral_modelscd ${HOME} && wget https://models.mistralcdn.com/mistral-7b-v0-3/mistral-7B-v0.3.tar tar -xf mistral-7B-v0.3.tar -C mistral_models
훈련 스크립트를 수정하고 다운로드한 폴더의 경로를 model_id_or_path
로 추가하십시오.
예를 들어 $HOME/mistral_models/7B
에 대한 절대 경로를 포함하도록 example/7B.yaml을 수정합니다.
model_id_or_path: "/Users/johndoe/mistral_models/7B"
효과적인 교육을 보장하기 위해 mistral-finetune
에는 교육 데이터 형식을 지정하는 방법에 대한 엄격한 요구 사항이 있습니다.
모든 데이터 파일은 jsonl 형식 파일로 저장되어야 합니다.
두 가지 유형의 데이터 파일을 작성할 수 있습니다.
사전 학습 데이터는 "text"
키에 저장된 일반 텍스트 데이터에 해당합니다. 예:
{"text": "문서 n°1에 포함된 텍스트"} {"text": "문서 n°2에 포함된 텍스트"}
현재 데이터를 따르는 두 가지 유형의 명령이 지원됩니다.
Instruct : 목록 형태로 "messages"
키에 저장된 대화 데이터입니다. 각 목록 항목은 "content"
및 "role"
키를 포함하는 사전입니다. "role"
은 "user", "assistant" 또는 "system" 중 하나인 문자열입니다. 손실은 "role" == "assistant"인 경우에만 계산됩니다. 예:
{ "메시지": [ { "role": "user", "content": "문서 n°1에 포함된 사용자 상호 작용 n°1" }, { "role": "도우미", "content": "문서 n°1에 포함된 봇 상호 작용 n°1" }, { "role": "user", "content": "문서 n°1에 포함된 사용자 상호 작용 n°2" }, { "role": "도우미", "content": "문서 n°1에 포함된 봇 상호 작용 n°2" } ] } { "메시지": [ { "role": "user", "content": "문서 n°2에 포함된 사용자 상호 작용 n°1" }, { "role": "도우미", "content": "문서 n°2에 포함된 봇 상호 작용 n°1" }, { "role": "user", "content": "문서 n°2에 포함된 사용자 상호 작용 n°2" }, { "role": "도우미", "content": "문서 n°2에 포함된 봇 상호 작용 n°2", "weight": 0, # n°2에서 훈련하지 않음 }, { "role": "user", "content": "문서 n°2에 포함된 사용자 상호 작용 n°3" }, { "role": "도우미", "content": "문서 n°2에 포함된 봇 상호 작용 n°3" } ] }
함수 호출 : "messages"
키에 목록 형식으로 저장된 대화형 데이터입니다. 각 목록 항목은 "role"
및 "content"
또는 "tool_calls"
키를 포함하는 사전입니다. "role"
은 "user", "assistant", "system" 또는 "tool" 중 하나인 문자열입니다. 손실은 "role" == "assistant"인 경우에만 계산됩니다.
참고 : 함수 호출에서 "tool_calls"
의 "id"
와 "tool_call_id"
정확히 9자로 구성된 문자열로 무작위로 생성됩니다. 여기에서 수행된 것처럼 데이터 준비 스크립트에서 이를 자동으로 생성하는 것이 좋습니다.
예:
{ "메시지": [ { "role": "system", "content": "당신은 사용자를 돕기 위해 다음 기능에 액세스할 수 있는 유용한 보조자입니다. 필요한 경우 해당 기능을 사용할 수 있습니다." }, { "role": "user", "content": ""listen"이라는 단어의 철자 바꾸기를 생성하는 데 도움을 주실 수 있나요?" }, { "역할": "도우미", "tool_calls": [ { "id": "TX92Jm8Zi", "유형": "함수", "함수": { "이름": "generate_anagram", "인수": "{"단어": "듣기"}" } } ] }, { "role": "도구", "content": "{"anagram": "silent"}", "tool_call_id": "TX92Jm8Zi" }, { "role": "도우미", "content": ""listen"이라는 단어의 철자 바꾸기는 "silent"입니다." }, { "role": "user", "content": "멋지네요! "race"라는 단어에 대한 철자 바꾸기를 생성할 수 있나요?" }, { "역할": "도우미", "tool_calls": [ { "id": "3XhQnxLsT", "유형": "함수", "함수": { "이름": "generate_anagram", "인수": "{"단어": "경주"}" } } ] } ], "도구": [ { "type": "function", "function": { "name": "generate_anagram", "description": "주어진 단어의 철자 바꾸기 생성", "parameters": { "type": "object", " Properties": { "word": { "type": "string", "description": "철자 바꾸기를 생성할 단어" } }, "필수": [ "단어" ] } } } ] }
훈련 실행을 시작하기 전에 데이터세트의 형식이 올바른지 확인하고 훈련 시간을 추정해야 합니다. ./utils/validate_data 스크립트를 사용하면 됩니다.
이 단계는 데이터 형식이 올바른지 확인하는 데 중요합니다.
다음 지침에 따라 모델을 훈련하는 간단한 예를 살펴보겠습니다.
Ultachat_200k 덩어리를 로드하세요.
데이터 폴더를 생성하고 해당 폴더로 이동합니다.
cd $HOME && mkdir -p 데이터 && cd $HOME/data
Pandas Dataframe에 데이터를 로드합니다.
참고 : pandas 및 pyarrow가 설치되어 있는지 확인하십시오( pip install pandas pyarrow
).
팬더를 pddf = pd.read_parquet('https://huggingface.co/datasets/HuggingFaceH4/ultrachat_200k/resolve/main/data/test_gen-00000-of-00001-3d4cd8309148a71f.parquet')로 가져옵니다.
train과 eval로 분할
df_train=df.sample(frac=0.95,random_state=200)df_eval=df.drop(df_train.index)
데이터를 jsonl에 저장
df_train.to_json("ultrachat_chunk_train.jsonl", orient="records", line=True)df_eval.to_json("ultrachat_chunk_eval.jsonl", orient="records", line=True)
ultrachat 데이터세트를 포함하도록 교육 yaml을 수정하고 yaml을 확인하세요.
$HOME/data/ultrachat_chunk_train.jsonl
에 대한 절대 경로와 훈련용 가중치 및 평가용 $HOME/data/ultrachat_chunk_eval.jsonl
을 혼합하는 데이터 세트를 포함하도록 example/7B.yaml을 수정합니다. 예:
data: instruct_data: "/Users/johndoe/data/ultrachat_chunk_train.jsonl" eval_instruct_data: "/Users/johndoe/data/ultrachat_chunk_eval.jsonl"
이제 훈련 YAML을 검증하여 데이터 형식이 올바른지 확인하고 훈련 시간을 추정할 수 있습니다.
cd $HOME/mistral-finetune python -m utils.validate_data --train_yaml example/7B.yaml
완료되면 다음과 같은 오류가 포함된 오류 보고서가 표시됩니다.
The data in line 1412 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user The data in line 1413 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user The data in line 1414 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user The data in line 1415 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user
많은 대화가 불필요한 '사용자' 역할로 끝나는 것 같습니다. 우리는 '보조' 메시지에 대해서만 훈련하여 불필요하게 데이터를 처리하게 되기 때문입니다.
./utils/reformat_data.py를 사용하여 데이터를 수정할 수 있습니다.
cd $HOME/mistral-finetune python -m utils.reformat_data $HOME/data/ultrachat_chunk_train.jsonl python -m utils.reformat_data $HOME/data/ultrachat_chunk_eval.jsonl
몇 개의 샘플을 건너뛰는 것을 볼 수 있습니다.
잠재적으로 훈련 단계 수 변경
데이터세트를 수정한 후 스크립트를 다시 실행하세요.
cd $HOME/mistral-finetune python -m utils.validate_data --train_yaml example/7B.yaml
데이터 입력 및 훈련 매개변수에 대한 요약을 얻어야 합니다.
Train States -------------------- { "expected": { "eta": "00:52:44", "data_tokens": 25169147, "train_tokens": 131072000, "epochs": "5.21", "max_steps": 500, "data_tokens_per_dataset": { "/Users/johndoe/data/ultrachat_chunk_train.jsonl": "25169147.0" }, "train_tokens_per_dataset": { "/Users/johndoe/data/ultrachat_chunk_train.jsonl": "131072000.0" }, "epochs_per_dataset": { "/Users/johndoe/data/ultrachat_chunk_train.jsonl": "5.2" } }, }
max_steps
500으로 설정하면 데이터세트를 대략 5번 반복하게 되는데 이는 합리적이지만 약간 너무 과할 수 있습니다. 아래에는 8xH100 클러스터에서 30분만 소요되는 권장 설정이 나와 있습니다.
다음으로 함수 호출에 대한 모델을 미세 조정하기 위한 고급 사용 사례를 살펴보겠습니다. 함수를 호출하려면 데이터가 위에 설명된 형식이어야 합니다. 예를 들어 보겠습니다.
Glaive 함수 호출 데이터세트의 채팅 형식 버전 로드
데이터 폴더를 생성하고 해당 폴더로 이동합니다.
cd $HOME && mkdir -p 데이터 && cd $HOME/data
Pandas Dataframe에 데이터를 로드합니다.
참고 : pandas 및 pyarrow가 설치되어 있는지 확인하십시오( pip install pandas pyarrow
).
팬더를 pddf = pd.read_parquet('https://huggingface.co/datasets/Locutusque/function-calling-chatml/resolve/main/data/train-00000-of-00001-f0b56c6983b4a78f.parquet')로 가져옵니다.
train과 eval로 분할
df_train=df.sample(frac=0.95,random_state=200)df_eval=df.drop(df_train.index)
데이터를 jsonl에 저장
df_train.to_json("glaive_train.jsonl", orient="records", line=True)df_eval.to_json("glaive_eval.jsonl", orient="records", line=True)
데이터세트 재형식화
보시다시피 데이터세트는 필수 함수 호출 형식을 따르지 않으므로 형식을 다시 지정해야 합니다. 무엇보다도 "from"
이름을 "user"
로 바꾸고 불필요한 "n"
문자를 제거해야 합니다. 이 데이터 세트의 경우 ./utils/reformat_data_glaive.py
를 사용할 수 있습니다.
cd $HOME/mistral-finetune python -m utils.reformat_data_glaive $HOME/data/glaive_train.jsonl python -m utils.reformat_data_glaive $HOME/data/glaive_eval.jsonl
이 명령을 실행하면 대부분의 샘플이 올바른 형식인지 확인할 수 있습니다.
참고 : 모든 종류의 데이터세트에 작동하는 형식 재지정 스크립트를 작성하는 것은 불가능합니다. 위의 필수 형식을 아직 따르지 않는 데이터세트가 있는 경우 형식 재지정 스크립트를 직접 만들어야 할 것입니다(여기서는 mistral-chat 또는 chat-gpt가 가장 좋습니다!).
데이터 세트 검증
이제 example/7B.yaml
에서 data.instruct_data
및 data.eval_instruct_data
$HOME/data/glaive_train.jsonl
및 $HOME/data/glaive_eval.jsonl
로 설정하여 데이터세트의 유효성을 검사할 수 있습니다.
형식이 변경된 데이터 세트에는 여전히 --create_corrected
사용하여 제거할 수 있는 몇 가지 오류가 있습니다. 이를 위해 다음과 같이 --create_corrected
추가해야 합니다.
cd $HOME/mistral-finetune python -m utils.validate_data --train_yaml example/7B.yaml --create_corrected
이 명령을 실행하면 몇 가지 오류가 표시되고 $HOME/data/glaive_train.jsonl.corrected
및 $HOME/data/glaive_eval.jsonl.corrected
두 개의 새로운 데이터 세트가 저장됩니다. example/7B.yaml
에서 이 두 데이터세트를 사용하고 명령을 다시 실행하세요. 이제 데이터 세트의 형식이 올바르게 지정되었습니다!
데이터세트 검증 섹션을 수행한 후 이제 학습을 시작할 수 있습니다. 더 빠른 훈련을 위해 max_steps를 300으로만 설정하는 것이 좋습니다. run_dir
실험 폴더에 정의하고 선택적으로 wandb_project
로깅을 위한 Weights & Biases 프로젝트로 설정하십시오. 예 :
max_steps: 300 run_dir: "/Users/johndoe/ultra_chat_test" wandb.project: ultra_chat
선택적으로 wandb
설정할 수도 있습니다.
훈련 구성을 저장하고 훈련을 시작하세요! --nproc-per-node
사용 가능한 GPU 수로 설정했는지 확인하세요.
cd $HOME/mistral-finetune torchrun --nproc-per-node 8 --master_port $RANDOM -m train example/7B.yaml
울트라 채팅 교육은 8xH100 노드에서 약 30분 정도 소요되며 결과 가중치는 약 6.3의 MT 벤치 점수를 제공해야 합니다.
글레이브 훈련은 8xH100 노드에서 약 1시간이 걸리며 결과 가중치는 함수 호출에 잘 작동해야 합니다.
mistral-finetune/examples/7B
예제에서는 학습 속도, 체중 감소 등에 대한 합리적인 매개변수를 정의하지만 사용 사례에 맞게 이러한 설정을 사용자 정의하는 것이 좋습니다.
일반적으로 훈련 구성은 다음 매개변수를 채워야 합니다.
model_id_or_path
학습을 시작할 모델을 정의합니다. 이는 사전 훈련된 모델 또는 로컬 모델 디렉터리에 대한 경로일 수 있습니다.
run_dir
훈련 체크포인트와 메트릭이 저장되는 디렉터리를 정의합니다.
seq_len
학습을 위한 시퀀스 길이를 정의합니다. 이는 모델이 처리할 입력 시퀀스의 최대 길이입니다. 훈련 효율성을 극대화하기 위해 샘플은 seq_len
길이에 도달하도록 패킹됩니다.
batch_size
GPU당 사용되는 훈련 예제 수를 정의합니다. 참고 : 모든 GPU에서 전체 유효 배치 크기(토큰 단위)는 num_gpus
x batch_size
x seq_len
과 같습니다.
max_steps
최대 훈련 단계 수를 정의합니다. 이는 학습 프로세스가 실행할 총 반복 횟수입니다. 이는 교육 시나리오의 특정 요구 사항에 따라 조정될 수 있습니다. 훈련 중에 표시되는 총 토큰 수는 max_steps
x num_gpus
x batch_size
x seq_len
입니다.
optim.lr
학습률을 정의합니다. 이는 옵티마이저의 초기 학습률입니다.
optim.weight_decay
가중치 감소를 정의합니다. 가중치 감소는 큰 가중치에 페널티를 적용하여 과적합을 방지하는 데 사용되는 정규화 기술입니다. 0.1로 두는 것이 좋습니다.
optim.pct_start
학습률 준비 단계가 감소하기 시작하기 전에 사용되는 총 훈련 단계의 백분율을 정의합니다. PyTorch의 OneCycleLR의 pct_start에 해당합니다.
lora.rank
LoRA(낮은 순위 적응) 어댑터의 크기를 정의합니다. LoRA에서 사용되는 하위 분해 순위를 조정하는 64 이하를 권장합니다.
seed
초기화 및 데이터 셔플링/샘플링을 위한 무작위 시드를 정의합니다. 시드를 설정하면 결과의 재현성이 보장됩니다.
log_freq
로깅 빈도를 정의합니다. 훈련 지표를 기록하는 빈도(단계별)를 지정합니다.
data.instruct_data
는 훈련에 사용되는 명령어 데이터의 경로입니다. 이 필드는 위에 설명된 형식으로 하나 이상의 데이터 소스로 채워져야 합니다. 각 데이터 소스는 jsonl 파일에 대한 경로이거나 jsonl 파일이 포함된 디렉터리에 대한 경로여야 하며, 그 뒤에는 이 데이터세트의 중요성을 정의하는 가중치(
가 와야 합니다. 예: data.instruct_data: "/path/to/data1.jsonl:5.,/path/to/data2.jsonl:1.,/path/to/dir_of_jsonls:1."
data.data
는 위에서 설명한 형식의 추가 사전 학습 데이터에 대한 선택적 경로입니다. 이 필드는 비워 둘 수 있습니다.
data.eval_instruct_data
는 모든 eval_freq
단계에서 교차 검증을 실행하기 위한 평가 명령 데이터에 대한 선택적 경로입니다. 교차 검증 지표는 loss
및 perplexity
로 표시됩니다.
eval_freq
모델을 평가하는 빈도(단계별)를 정의합니다. 이는 검증 세트에서 모델이 평가되는 간격을 지정합니다.
no_eval
은 중간 평가를 활성화하거나 비활성화하는 플래그입니다. False로 설정하면 훈련 중에 주기적으로 평가할 수 있습니다.
ckpt_freq
체크포인트를 저장하는 빈도(단계별)를 정의합니다. 모델의 상태가 저장되는 간격을 지정합니다.
save_adapters
학습된 LoRA 체크포인트만 저장할지, 아니면 학습된 LoRA를 기본 모델에 직접 병합하여 저장할지 여부를 정의합니다. 참고 : save_adapters=False
설정할 때 단일 프로세스에서 전체 모델을 저장할 수 있는 충분한 CPU 및 GPU 메모리가 있는지 확인하십시오(일반적으로 7B 모델에만 가능함).
wandb.key
로깅을 위해 Weights & Biases(wandb) API 키를 전달하는 데 사용됩니다. 이를 통해 훈련 지표를 wandb 대시보드에 기록할 수 있습니다.
wandb.project
wandb 프로젝트 이름을 정의합니다. 훈련 실행이 wandb 인터페이스에 기록되는 곳입니다.
모델이 훈련되면 추론을 통해 모델을 시험해 봐야 합니다. 잘못된 추론을 사용하는 것이 좋습니다.
mistral_inference
올바르게 설치되어 있는지 확인하십시오.
pip install mistral_inference
lora.safetensors
$HOME/ultra_chat_test/checkpoints/checkpoint_000300/consolidated/lora.safetensors
아래에 저장되어 있다고 가정하면 mistral_inference
사용하여 모델과 채팅할 수 있습니다. 예 :
mistral-chat /mnt/slow/runs/patrick/mistral-finetune/7B/ --max_tokens 256 --온도 1.0 --instruct --lora_path $HOME/ultra_chat_test/checkpoints/checkpoint_000300/consolidated/lora.safetensors
훈련 실행을 모니터링하고 시각화하는 데 도움이 되도록 가중치 및 편향에 대한 명시적 지원을 추가했습니다. 이 통합을 통해 다양한 측정항목을 기록하고 실험을 쉽게 추적할 수 있습니다.
mistral-finetune
과 함께 가중치 및 편향을 사용하려면 다음 단계를 따르세요.
가중치 및 편향 설치:
wandb
라이브러리가 설치되어 있는지 확인하십시오. pip를 사용하여 설치할 수 있습니다.
핍 설치 WDB
훈련이 시작되면 wandb 프로젝트 대시보드를 방문하여 진행 상황을 실시간으로 모니터링할 수 있습니다. 훈련 손실, 평가 손실, 학습률 등을 포함한 모든 측정항목이 기록되고 시각화됩니다.
wandb 사용 방법에 대한 자세한 내용은 가중치 및 편향 문서를 참조하세요.
중요 : 모델의 어휘 크기가 32768(32000이 아님)을 갖는 v3 토크나이저와 호환되는 mistral 모델만 미세 조정할 수 있습니다. 그러나 어휘 크기 32000의 이전 버전을 쉽게 확장하여 어휘 크기를 가질 수 있습니다. 다음을 사용하여 32768 중:
python -m utils.extend_model_vocab --original_model_ckpt /folder/to/old/model --extended_model_ckpt /folder/to/extended/model
확장이 작동하면 /folder/to/extended/model
에 새로 생성된 모델 체크포인트를 사용하여 미세 조정할 수 있습니다.
MoE를 미세 조정하는 가장 좋은 방법은 무엇입니까?
MoE 모델을 미세 조정할 때 더 높은 수준의 성능 차이를 볼 수 있습니다. 다양한 시드를 사용하여 MoE 모델을 미세 조정하면 성능에 큰 차이가 발생할 수 있다는 사실을 발견하는 것은 드문 일이 아닙니다. 우리는 밀집 모델에서는 그렇게 높은 분산을 관찰하지 못했습니다. 따라서 MoE 모델에서 동일한 미세 조정 프로세스의 여러 인스턴스를 실행하고 가장 성능이 좋은 인스턴스를 선택하는 것이 좋습니다.
모델 훈련 과정에서 사용되는 토큰 수를 어떻게 확인할 수 있나요?
다음 스크립트를 사용하여 https://github.com/mistralai/mistral-finetune/blob/main/utils/validate_data.py를 확인할 수 있습니다. 이 스크립트는 .yaml 훈련 파일을 입력으로 받아들이고 모델이 훈련 중인 토큰 수를 반환합니다.
CUDA 메모리 부족 오류가 발생하면 어떻게 해야 합니까?
가능한 해결책 중 하나는 GPU당 배치 크기를 줄이는 것입니다. 배치 크기는 seq_len
x batch_size
와 같습니다. batch_size
1로 설정하고 seq_len
줄여보세요. .yaml 파일에서 batch_size
및 seq_len
정의할 수 있습니다.