이 저장소에는 영어가 아닌 모든 언어에 대한 채팅을 위해 LLaMa3-8B(또는 기타 기본 모델)를 미세 조정하는 편리한 스크립트가 포함되어 있습니다. 이에 대한 근거는 LLaMa3가 주로 영어 데이터로 훈련되었으며 다른 언어에서는 어느 정도 작동하지만 영어에 비해 성능이 좋지 않다는 것입니다.
미세 조정 기능과 RAG 기능을 결합하세요. LLaMa2Lang으로 조정된 모델 위에 사용할 수 있는 RAG의 RAG Me Up 저장소를 확인하세요.
pip install -r requirements.txt
# Translate OASST1 to target language
python translate.py m2m target_lang checkpoint_location
# Combine the checkpoint files into a dataset
python combine_checkpoints.py input_folder output_location
# Finetune
python finetune.py tuned_model dataset_name instruction_prompt
# Optionally finetune with DPO (RLHF)
python finetune_dpo.py tuned_model dataset_name instruction_prompt
# Run inference
python run_inference.py model_name instruction_prompt input
특정 언어에 대해 LLaMa3와 같은 기초 모델을 조정하기 위해 따르는 프로세스는 다음과 같습니다.
다음은 테스트되었지만 잠재적으로 더 많은 것이 작동할 것입니다.
위 프로세스는 무료 Google Colab T4 GPU에서 완전히 실행될 수 있습니다. 그러나 마지막 단계는 충분히 짧은 컨텍스트 창과 최대 2개의 배치가 있어야만 성공적으로 실행할 수 있습니다. 또한 2단계의 번역은 특정 언어에 대해 총 36시간이 걸리므로 다음과 같은 경우 여러 단계로 실행해야 합니다. 무료 Google Colab GPU를 계속 사용하고 싶습니다.
5단계의 미세 조정 모델은 broad.ai에서 A40을 사용하여 수행되었으며 각 모델당 1달러 미만의 비용이 소요되어 약 1.5시간 만에 완료되었습니다.
Python이 설치되어 있고 사용자 환경에 맞게 작동하는지 확인하세요(CUDA 사용 권장): https://pytorch.org/get-started/locally/
저장소를 복제하고 요구사항을 설치합니다.
pip install -r requirements.txt
usage: translate.py [-h] [--quant8] [--quant4] [--base_dataset BASE_DATASET] [--base_dataset_text_field BASE_DATASET_TEXT_FIELD] [--base_dataset_lang_field BASE_DATASET_LANG_FIELD]
[--checkpoint_n CHECKPOINT_N] [--batch_size BATCH_SIZE] [--max_length MAX_LENGTH] [--cpu] [--source_lang SOURCE_LANG]
{opus,mbart,madlad,m2m,nllb,seamless_m4t_v2,towerinstruct} ... target_lang checkpoint_location
Translate an instruct/RLHF dataset to a given target language using a variety of translation models
positional arguments:
{opus,mbart,madlad,m2m,nllb,seamless_m4t_v2,towerinstruct}
The model/architecture used for translation.
opus Translate the dataset using HelsinkiNLP OPUS models.
mbart Translate the dataset using mBART.
madlad Translate the dataset using Google's MADLAD models.
m2m Translate the dataset using Facebook's M2M models.
nllb Translate the dataset using Facebook's NLLB models.
seamless_m4t_v2 Translate the dataset using Facebook's SeamlessM4T-v2 multimodal models.
towerinstruct Translate the dataset using Unbabel's Tower Instruct. Make sure your target language is in the 10 languages supported by the model.
target_lang The target language. Make sure you use language codes defined by the translation model you are using.
checkpoint_location The folder the script will write (JSONized) checkpoint files to. Folder will be created if it doesn't exist.
options:
-h, --help show this help message and exit
--quant8 Optional flag to load the translation model in 8 bits. Decreases memory usage, increases running time
--quant4 Optional flag to load the translation model in 4 bits. Decreases memory usage, increases running time
--base_dataset BASE_DATASET
The base dataset to translate, defaults to OpenAssistant/oasst1
--base_dataset_text_field BASE_DATASET_TEXT_FIELD
The base dataset's column name containing the actual text to translate. Defaults to text
--base_dataset_lang_field BASE_DATASET_LANG_FIELD
The base dataset's column name containing the language the source text was written in. Defaults to lang
--checkpoint_n CHECKPOINT_N
An integer representing how often a checkpoint file will be written out. To start off, 400 is a reasonable number.
--batch_size BATCH_SIZE
The batch size for a single translation model. Adjust based on your GPU capacity. Default is 10.
--max_length MAX_LENGTH
How much tokens to generate at most. More tokens might be more accurate for lengthy input but creates a risk of running out of memory. Default is unlimited.
--cpu Forces usage of CPU. By default GPU is taken if available.
--source_lang SOURCE_LANG
Source language to select from OASST based on lang property of dataset
다양한 번역 모델에 대해 더 많은 매개변수를 원하면 다음을 실행하세요.
python translate.py [MODEL] -h
위 목록에서 공통 매개변수를 지정하기 전에 먼저 모델별 매개변수를 지정해야 합니다. 호출 예시:
# Using M2M with 4bit quantization and differen batch sizes to translate Dutch
python translate.py m2m nl ./output_nl --quant4 --batch_size 20
# Using madlad 7B with 8bit quantization for German with different max_length
python translate.py madlad --model_size 7b de ./output_de --quant8 --batch_size 5 --max_length 512
# Be sure to use target language codes that the model you use understands
python translate.py mbart xh_ZA ./output_xhosa
python translate.py nllb nld_Latn ./output_nl
HF_TOKEN
환경 변수가 설정되어 있는지 확인하세요. usage: combine_checkpoints.py [-h] input_folder output_location
Combine checkpoint files from translation.
positional arguments:
input_folder The checkpoint folder used in translation, with the target language appended.
Example: "./output_nl".
output_location Where to write the Huggingface Dataset. Can be a disk location or a Huggingface
Dataset repository.
options:
-h, --help show this help message and exit
usage: finetune.py [-h] [--base_model BASE_MODEL] [--base_dataset_text_field BASE_DATASET_TEXT_FIELD] [--base_dataset_rank_field BASE_DATASET_RANK_FIELD] [--base_dataset_id_field BASE_DATASET_ID_FIELD] [--base_dataset_parent_field BASE_DATASET_PARENT_FIELD]
[--base_dataset_role_field BASE_DATASET_ROLE_FIELD] [--quant8] [--noquant] [--max_seq_length MAX_SEQ_LENGTH] [--num_train_epochs NUM_TRAIN_EPOCHS] [--batch_size BATCH_SIZE] [--threads_output_name THREADS_OUTPUT_NAME] [--thread_template THREAD_TEMPLATE]
[--padding PADDING]
tuned_model dataset_name instruction_prompt
Finetune a base instruct/chat model using (Q)LoRA and PEFT
positional arguments:
tuned_model The name of the resulting tuned model.
dataset_name The name of the dataset to use for fine-tuning. This should be the output of the combine_checkpoints script.
instruction_prompt An instruction message added to every prompt given to the chatbot to force it to answer in the target language. Example: "You are a generic chatbot that always answers in English."
options:
-h, --help show this help message and exit
--base_model BASE_MODEL
The base foundation model. Default is "NousResearch/Meta-Llama-3-8B-Instruct".
--base_dataset_text_field BASE_DATASET_TEXT_FIELD
The dataset's column name containing the actual text to translate. Defaults to text
--base_dataset_rank_field BASE_DATASET_RANK_FIELD
The dataset's column name containing the rank of an answer given to a prompt. Defaults to rank
--base_dataset_id_field BASE_DATASET_ID_FIELD
The dataset's column name containing the id of a text. Defaults to message_id
--base_dataset_parent_field BASE_DATASET_PARENT_FIELD
The dataset's column name containing the parent id of a text. Defaults to parent_id
--base_dataset_role_field BASE_DATASET_ROLE_FIELD
The dataset's column name containing the role of the author of the text (eg. prompter, assistant). Defaults to role
--quant8 Finetunes the model in 8 bits. Requires more memory than the default 4 bit.
--noquant Do not quantize the finetuning. Requires more memory than the default 4 bit and optional 8 bit.
--max_seq_length MAX_SEQ_LENGTH
The maximum sequence length to use in finetuning. Should most likely line up with your base model's default max_seq_length. Default is 512.
--num_train_epochs NUM_TRAIN_EPOCHS
Number of epochs to use. 2 is default and has been shown to work well.
--batch_size BATCH_SIZE
The batch size to use in finetuning. Adjust to fit in your GPU vRAM. Default is 4
--threads_output_name THREADS_OUTPUT_NAME
If specified, the threads created in this script for finetuning will also be saved to disk or HuggingFace Hub.
--thread_template THREAD_TEMPLATE
A file containing the thread template to use. Default is threads/template_fefault.txt
--padding PADDING What padding to use, can be either left or right.
6.1 [선택 사항] DPO를 사용하여 미세 조정(RLHF와 유사)
usage: finetune_dpo.py [-h] [--base_model BASE_MODEL] [--base_dataset_text_field BASE_DATASET_TEXT_FIELD] [--base_dataset_rank_field BASE_DATASET_RANK_FIELD] [--base_dataset_id_field BASE_DATASET_ID_FIELD] [--base_dataset_parent_field BASE_DATASET_PARENT_FIELD] [--quant8]
[--noquant] [--max_seq_length MAX_SEQ_LENGTH] [--max_prompt_length MAX_PROMPT_LENGTH] [--num_train_epochs NUM_TRAIN_EPOCHS] [--batch_size BATCH_SIZE] [--threads_output_name THREADS_OUTPUT_NAME] [--thread_template THREAD_TEMPLATE] [--max_steps MAX_STEPS]
[--padding PADDING]
tuned_model dataset_name instruction_prompt
Finetune a base instruct/chat model using (Q)LoRA and PEFT using DPO (RLHF)
positional arguments:
tuned_model The name of the resulting tuned model.
dataset_name The name of the dataset to use for fine-tuning. This should be the output of the combine_checkpoints script.
instruction_prompt An instruction message added to every prompt given to the chatbot to force it to answer in the target language. Example: "You are a generic chatbot that always answers in English."
options:
-h, --help show this help message and exit
--base_model BASE_MODEL
The base foundation model. Default is "NousResearch/Meta-Llama-3-8B-Instruct".
--base_dataset_text_field BASE_DATASET_TEXT_FIELD
The dataset's column name containing the actual text to translate. Defaults to text
--base_dataset_rank_field BASE_DATASET_RANK_FIELD
The dataset's column name containing the rank of an answer given to a prompt. Defaults to rank
--base_dataset_id_field BASE_DATASET_ID_FIELD
The dataset's column name containing the id of a text. Defaults to message_id
--base_dataset_parent_field BASE_DATASET_PARENT_FIELD
The dataset's column name containing the parent id of a text. Defaults to parent_id
--quant8 Finetunes the model in 8 bits. Requires more memory than the default 4 bit.
--noquant Do not quantize the finetuning. Requires more memory than the default 4 bit and optional 8 bit.
--max_seq_length MAX_SEQ_LENGTH
The maximum sequence length to use in finetuning. Should most likely line up with your base model's default max_seq_length. Default is 512.
--max_prompt_length MAX_PROMPT_LENGTH
The maximum length of the prompts to use. Default is 512.
--num_train_epochs NUM_TRAIN_EPOCHS
Number of epochs to use. 2 is default and has been shown to work well.
--batch_size BATCH_SIZE
The batch size to use in finetuning. Adjust to fit in your GPU vRAM. Default is 4
--threads_output_name THREADS_OUTPUT_NAME
If specified, the threads created in this script for finetuning will also be saved to disk or HuggingFace Hub.
--thread_template THREAD_TEMPLATE
A file containing the thread template to use. Default is threads/template_fefault.txt
--max_steps MAX_STEPS
The maximum number of steps to run DPO for. Default is -1 which will run the data through fully for the number of epochs but this will be very time-consuming.
--padding PADDING What padding to use, can be either left or right.
6.1 [선택 사항] ORPO를 사용하여 미세 조정(RLHF와 유사)
usage: finetune_orpo.py [-h] [--base_model BASE_MODEL] [--base_dataset_text_field BASE_DATASET_TEXT_FIELD] [--base_dataset_rank_field BASE_DATASET_RANK_FIELD] [--base_dataset_id_field BASE_DATASET_ID_FIELD] [--base_dataset_parent_field BASE_DATASET_PARENT_FIELD] [--quant8]
[--noquant] [--max_seq_length MAX_SEQ_LENGTH] [--max_prompt_length MAX_PROMPT_LENGTH] [--num_train_epochs NUM_TRAIN_EPOCHS] [--batch_size BATCH_SIZE] [--threads_output_name THREADS_OUTPUT_NAME] [--thread_template THREAD_TEMPLATE] [--max_steps MAX_STEPS]
[--padding PADDING]
tuned_model dataset_name instruction_prompt
Finetune a base instruct/chat model using (Q)LoRA and PEFT using ORPO (RLHF)
positional arguments:
tuned_model The name of the resulting tuned model.
dataset_name The name of the dataset to use for fine-tuning. This should be the output of the combine_checkpoints script.
instruction_prompt An instruction message added to every prompt given to the chatbot to force it to answer in the target language. Example: "You are a generic chatbot that always answers in English."
options:
-h, --help show this help message and exit
--base_model BASE_MODEL
The base foundation model. Default is "NousResearch/Meta-Llama-3-8B-Instruct".
--base_dataset_text_field BASE_DATASET_TEXT_FIELD
The dataset's column name containing the actual text to translate. Defaults to text
--base_dataset_rank_field BASE_DATASET_RANK_FIELD
The dataset's column name containing the rank of an answer given to a prompt. Defaults to rank
--base_dataset_id_field BASE_DATASET_ID_FIELD
The dataset's column name containing the id of a text. Defaults to message_id
--base_dataset_parent_field BASE_DATASET_PARENT_FIELD
The dataset's column name containing the parent id of a text. Defaults to parent_id
--quant8 Finetunes the model in 8 bits. Requires more memory than the default 4 bit.
--noquant Do not quantize the finetuning. Requires more memory than the default 4 bit and optional 8 bit.
--max_seq_length MAX_SEQ_LENGTH
The maximum sequence length to use in finetuning. Should most likely line up with your base model's default max_seq_length. Default is 512.
--max_prompt_length MAX_PROMPT_LENGTH
The maximum length of the prompts to use. Default is 512.
--num_train_epochs NUM_TRAIN_EPOCHS
Number of epochs to use. 2 is default and has been shown to work well.
--batch_size BATCH_SIZE
The batch size to use in finetuning. Adjust to fit in your GPU vRAM. Default is 4
--threads_output_name THREADS_OUTPUT_NAME
If specified, the threads created in this script for finetuning will also be saved to disk or HuggingFace Hub.
--thread_template THREAD_TEMPLATE
A file containing the thread template to use. Default is threads/template_fefault.txt
--max_steps MAX_STEPS
The maximum number of steps to run ORPO for. Default is -1 which will run the data through fully for the number of epochs but this will be very time-consuming.
--padding PADDING What padding to use, can be either left or right.
usage: run_inference.py [-h] model_name instruction_prompt input
Script to run inference on a tuned model.
positional arguments:
model_name The name of the tuned model that you pushed to Huggingface in the previous
step.
instruction_prompt An instruction message added to every prompt given to the chatbot to force
it to answer in the target language.
input The actual chat input prompt. The script is only meant for testing purposes
and exits after answering.
options:
-h, --help show this help message and exit
내 대상 언어에 대해 어떤 번역 모델을 선택해야 하는지 어떻게 알 수 있나요?
어느 정도 좋은 추측을 하는 데 도움이 되는 benchmark.py
스크립트를 사용하여 처리했습니다 (우리가 사용하는 데이터 세트는 OPUS 모델이 훈련된 것과 동일하므로 결과는 항상 OPUS에 유리합니다). 사용법은 아래 스크립트의 도움말을 참조하세요. 모델은 4비트 양자화로 로드되고 OPUS 서적 하위 집합의 작은 샘플에서 실행됩니다.
기본 데이터세트에서 가장 일반적으로 사용되는 언어를 source_lang으로 사용하고 대상 번역 언어를 target_언어로 사용하세요. 예를 들어 OASST1의 경우 최소한 en
및 es
소스 언어로 실행해야 합니다.
usage: benchmark.py [-h] [--cpu] [--start START] [--n N] [--max_length MAX_LENGTH] source_language target_language included_models
Benchmark all the different translation models for a specific source and target language to find out which performs best. This uses 4bit quantization to limit GPU usage. Note:
the outcomes are indicative - you cannot assume corretness of the BLEU and CHRF scores but you can compare models against each other relatively.
positional arguments:
source_language The source language you want to test for. Check your dataset to see which occur most prevalent or use English as a good start.
target_language The source language you want to test for. This should be the language you want to apply the translate script on. Note: in benchmark, we use 2-character
language codes, in constrast to translate.py where you need to specify whatever your model expects.
included_models Comma-separated list of models to include. Allowed values are: opus, m2m_418m, m2m_1.2b, madlad_3b, madlad_7b, madlad_10b, madlad_7bbt, mbart,
nllb_distilled600m, nllb_1.3b, nllb_distilled1.3b, nllb_3.3b, seamless
options:
-h, --help show this help message and exit
--cpu Forces usage of CPU. By default GPU is taken if available.
--start START The starting offset to include sentences from the OPUS books dataset from. Defaults to 0.
--n N The number of sentences to benchmark on. Defaults to 100.
--max_length MAX_LENGTH
How much tokens to generate at most. More tokens might be more accurate for lengthy input but creates a risk of running out of memory. Default is 512.
우리는 이미 수많은 데이터 세트와 모델을 만들었고 앞으로도 계속 만들 것입니다. LLM의 민주화를 돕고 싶으십니까? 저장소를 복제하고 다른 언어에 대한 데이터 세트와 모델을 만든 다음 PR을 만듭니다.
네덜란드어 UnderstandingLing/oasst1_nl | 스페인어 UnderstandingLing/oasst1_es | 프랑스어 UnderstandingLing/oasst1_fr | 독일어 UnderstandingLing/oasst1_de |
카탈로니아어 xaviviro/oasst1_ca | 포르투갈어 UnderstandingLing/oasst1_pt | 아랍어 HeshamHaroon/oasst-arabic | 이탈리아어 UnderstandingLing/oasst1_it |
러시아어 UnderstandingLing/oasst1_ru | 힌디어 이해Ling/oasst1_hi | 중국어 이해Ling/oasst1_zh | 폴란드 기독교인/oasst1_pl |
일본어 이해Ling/oasst1_jap | 바스크어 xezpeleta/oasst1_eu | 벵골어 UnderstandingLing/oasst1_bn | 터키어 UnderstandingLing/oasst1_tr |
이 모델을 사용하기 전에 Meta의 LLaMa3-8B 모델에 액세스할 수 있는지 확인하고 HF_TOKEN을 설정하세요.
UnderstandingLing/Llama-3-8B-Instruct-nl 네덜란드어 | UnderstandingLing/Llama-3-8B-Instruct-es 스페인어 | UnderstandingLing/Llama-3-8B-Instruct-fr 프랑스어 | UnderstandingLing/Llama-3-8B-Instruct-de 독일어 |
UnderstandingLing/Llama-3-8B-Instruct-pt 포르투갈어 | UnderstandingLing/Llama-3-8B-Instruct-it 이탈리아어 | UnderstandingLing/Llama-3-8B-Instruct-hi 힌디어 | UnderstandingLing/Llama-3-8B-Instruct-ru 러시아어 |
네덜란드어 UnderstandingLing/oasst1_nl_threads | 스페인어 UnderstandingLing/oasst1_es_threads | 프랑스어 UnderstandingLing/oasst1_fr_threads | 독일어 UnderstandingLing/oasst1_de_threads |
카탈로니아어 xaviviro/oasst1_ca_threads | 포르투갈어 UnderstandingLing/oasst1_pt_threads | 아랍어 HeshamHaroon/oasst-arabic_threads | 이탈리아어 UnderstandingLing/oasst1_it_threads |
러시아어 UnderstandingLing/oasst1_ru_threads | 힌디어 UnderstandingLing/oasst1_hi_threads | 중국어 이해Ling/oasst1_zh_threads | 폴란드 기독교인/oasst1_pl_threads |
일본어 이해Ling/oasst1_jap_threads | 바스크어 xezpeleta/oasst1_eu_threads | 벵골어 UnderstandingLing/oasst1_bn_threads | 터키어 UnderstandingLing/oasst1_tr_threads |
UnderstandingLing/llama-2-7b-chat-nl 네덜란드어 | Ling/llama-2-7b-chat-es 스페인어 이해 | UnderstandingLing/llama-2-7b-chat-fr 프랑스어 | UnderstandingLing/llama-2-7b-chat-de 독일어 |
xaviviro/llama-2-7b-chat-ca 카탈로니아어 | Ling/llama-2-7b-chat-pt 포르투갈어 이해 | HeshamHaroon/llama-2-7b-chat-ar 아랍어 | 이해Ling/llama-2-7b-chat-it 이탈리아어 |
이해Ling/llama-2-7b-chat-ru 러시아어 | 이해Ling/llama-2-7b-chat-hi 힌디어 | Ling/llama-2-7b-chat-zh 중국어 이해 | chrystians/llama-2-7b-chat-pl-polish-polski 폴란드어 |
xezpeleta/llama-2-7b-chat-eu 바스크어 | UnderstandingLing/llama-2-7b-chat-bn 벵골어 | UnderstandingLing/llama-2-7b-chat-tr 터키어 |
UnderstandingLing/Mistral-7B-Instruct-v0.2-nl 네덜란드어 | UnderstandingLing/Mistral-7B-Instruct-v0.2-es 스페인어 | UnderstandingLing/Mistral-7B-Instruct-v0.2-de 독일어 |
UnderstandingLing/llama-2-13b-chat-nl 네덜란드어 | UnderstandingLing/llama-2-13b-chat-es 스페인어 | UnderstandingLing/llama-2-13b-chat-fr 프랑스어 |
UnderstandingLing/Mixtral-8x7B-Instruct-nl 네덜란드어 |
[INST] <
[INST] <[INST] Hoeveel inwoners heeft die stad? [/INST] 850 duizend inwoners (2023)
[INST] <[INST] Hoeveel inwoners heeft die stad? [/INST] 850 duizend inwoners (2023)[INST] In welke provincie ligt die stad? [/INST] In de provincie Noord-Holland
[INST] <
Q: 전체 OASST1/2 데이터 세트를 먼저 번역하는 이유는 무엇입니까? 가장 높은 순위의 스레드만 번역하는 것이 더 빠르지 않을까요?
A: 스레드를 먼저 생성한 다음 번역하면 처리 시간 측면에서 상당히 많은 이점을 얻을 수 있지만 자체적으로 유용할 수 있다고 믿기 때문에 전체 OASST1/2 번역을 커뮤니티에 제공합니다.
Q: 바닐라 LLaMa3에 비해 미세 조정이 얼마나 잘 수행되나요?
답변: 공식적인 벤치마크는 없지만 LLaMa3가 처음부터 영어가 아닌 다른 언어를 일관되게 사용하도록 하는 것은 불가능하지는 않더라도 어려운 일입니다. 그것이 생산하는 비영어권 언어는 종종 문법적으로 깨져 있습니다. 우리의 미세 조정에서는 이러한 동작이 나타나지 않습니다.
Q: 미세 조정을 위해 다른 프레임워크를 사용할 수 있습니까?
A: 예, 가능합니다. 우리는 다중 GPU 설정 교육에 Axolotl을 사용합니다.
Q: 다양한 번역 모델을 혼합할 수 있나요?
A: 물론, 여러 모델을 통해 번역을 수행하면 성능이 향상될 수도 있다고 생각합니다. 번역을 조기에 중지하고 다른 번역 모델로 번역 스크립트를 다시 실행하여 체크포인트부터 계속하면 이를 달성할 수 있습니다.
우리는 AI를 민주화하고 응용 프로그램을 발전시키기 위한 자금을 적극적으로 찾고 있습니다. 투자를 원하시면 [email protected]로 연락주세요.