����λ�ã���ҳ > �����̳� > �̳� > ͨ��ORPO����΢�� llama3��ģ��(Fine-tune Llama 3 with ORPO)

ͨ��ORPO����΢�� llama3��ģ��(Fine-tune Llama 3 with ORPO)

��Դ������������|��ʱ�䣺2024-04-23 10:50:52 |���Ķ���171��|�� ��ǩ�� T A3 in �� |����������

1f45bd1e8577af66a05f5e3fadb0b29 ͨ��ORPO��llama����΢�� ǰ�� ORPO��һ����ӱ��΢��������������ͳ�ļල΢����ƫ�ö���׶����ϵ�һ�������С��������ѵ������ļ�����Դ��ʱ�䡣���⣬������������ORPO�ڸ���ģ�ʹ�С�ͻ�׼�����ж��������������뷽���� �ڱ�

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) 1f45bd1e8577af66a05f5e3fadb0b29

ͨ��ORPO��llama����΢��

ǰ��

ORPO��һ����ӱ��΢��������������ͳ�ļල΢����ƫ�ö���׶����ϵ�һ�������С��������ѵ������ļ�����Դ��ʱ�䡣���⣬������������ORPO�ڸ���ģ�ʹ�С�ͻ�׼�����ж��������������뷽���� �ڱ����У����ǽ�ʹ��ORPO��TRL����΢���µ�Llama 3 8Bģ�͡����������Google Colab��https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi?usp=sharing����GitHub�ϵ�LLM(https://github.com/mlabonne/llm-course)�γ����ҵ���

?? ORPO

ָ�������ƫ�ö����ǽ���������ģ�ͣ�LLMs����Ӧ�ض�����Ĺؼ���������ͳ�ϣ����漰��һ����׶εĹ��̣�

  • ��ָ����мලʽ΢����SFT����ʹģ����ӦĿ������
  • �����෴����ǿ��ѧϰ��RLHF����ֱ����ѡ�Ż���DPO��������ƫ�ö��뷽����������������ѡ��Ӧ���DZ��ܾ���Ӧ�Ŀ����ԡ�
ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) ΢��ͼƬ_20240423001958

Ȼ�����о���Ա�������ַ�����һ�������ԡ����Ǽල΢����SFT��������Ч����ģ����Ӧ�ض�������Ҳ����Ϊʲô��Ҫƫ�ö���׶�RLHF�������ܻ�ӭ����Ͳ��ܻ�ӭ���֮����ʵIJ�ࡣ

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) image

SFT�����У����ܻ�ӭ��������ʵ֤ from ORPO����

2024��Hong��Lee�����ORPOͨ����SFT��RLHFͳһΪһ������ѵ�����̣�Ϊ��������ṩ��һ�����ŵĽ��������ORPO�޸��˱�׼language model��ѵ��Ŀ�꣬����������Ȼ��ʧ��odds ratio(OR)��������������OR��ʧ�Բ��ܻ�ӭ�����ʩ������΢�ijͷ���ͬʱ�Ӵ����ܻ�ӭ�����������ģ��ͬʱѧϰĿ������������ƫ�ö��롣

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) 91e1091deacae95fb17f1b6995b94c2

ORPO�Ѿ�����Ҫ��΢�����еõ�ʵ�֣�����TRL��Axolotl��LLaMA-Factory������һ���У����ǽ��������ʹ��TRL���в�����

? ��ʼͨ��ORPO����΢��

Llama3��Meta����������һ����������ģ�ͣ�LLM������Щģ������15����token�Ĺ㷺���ݼ���ѵ���ģ����֮�£�Llama2��ѵ�����ݼ�Ϊ2����token��������������ģ�ͳߴ磺һ��700�ڲ�����ģ�ͺ�һ����С��80�ڲ�����ģ�͡�700�ڲ�����ģ���Ѿ�չʾ������ӡ����̵����ܣ���MMLU��׼�����е÷�Ϊ82����HumanEval��׼�����е÷�Ϊ81.7��

Llama3ģ�ͻ������������ij��ȣ����ɴ�8192��token��Llama2Ϊ4096��token�������ҿ���ͨ��RoPE��չ��32k�����⣬��Щģ��ʹ����һ������128K-token�ʻ�����·ִ����������˱����ı�����token������15%������ʻ��Ҳ�����˴�70�ڵ�80�ڲ�����������

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) image

ORPO��Ҫһ��ƫ�����ݼ�������һ����ʾ��һ����ѡ��Ĵ𰸺�һ�����ܾ��Ĵ𰸡�����������У����ǽ�ʹ��mlabonne/orpo-dpo- mix-40k������һ�������¸�����DPO���ݼ���϶��ɵ����ݼ���

��ʼ��װ����Ŀ⣺

??pip?install?-U?transformers?datasets?accelerate?peft?trl?bitsandbytes?wandb??

һ����װ��ɣ����ǿ��Ե����Ҫ�Ŀ⣬����¼��W&B����ѡ����

????import?gc??
????import?os??
??????
????import?torch??
????import?wandb??
????from?datasets?import?load_dataset??
????from?google.colab?import?userdata??
????from?peft?import?LoraConfig,?PeftModel,?prepare_model_for_kbit_training??
????from?transformers?import?(??
????????AutoModelForCausalLM,??
????????AutoTokenizer,??
????????BitsAndBytesConfig,??
????????TrainingArguments,??
????????pipeline,??
????)??
????from?trl?import?ORPOConfig,?ORPOTrainer,?setup_chat_format??
??????
????wb_token?=?userdata.get('wandb')??
????wandb.login(key=wb_token)??

�������һ����µ�GPU���㻹Ӧ���ܹ�ʹ��Flash Attention�����滻Ĭ�ϵ����й�עʵ�֣���һ������Ч�ķ�ʽ��ʵ�֡�

????if?torch.cuda.get_device_capability()[0]?>=?8:??
????????!pip?install?-qqq?flash-attn??
????????attn_implementation?=?"flash_attention_2"??
????????torch_dtype?=?torch.bfloat16??
????else:??
????????attn_implementation?=?"eager"??
????????torch_dtype?=?torch.float16??

�����������ǽ�ʹ��bitsandbytes��4λ���ȼ���Llama 3 8Bģ�͡�Ȼ������ʹ��PEFTΪQLoRA����LoRA���á��һ�ʹ���˷����setup_chat_format()�������޸�ģ�ͺ�ΪChatML֧�ֵķִ����������Զ�Ӧ���������ģ�壬������������ƣ�������ģ�͵�Ƕ���Ĵ�С��ƥ���µĴʻ����С�� ��ע�⣬����Ҫ�ύ������ܷ���meta-llama/Meta-Llama-3-8B������Ҫ��¼�����Hugging Face�˻������ߣ�����Լ���δ��յ�ģ�͸�������NousResearch/Meta--Llama-3-8B��

????#?Model??
????base_model?=?"meta-llama/Meta-Llama-3-8B"??
????new_model?=?"OrpoLlama-3-8B"??
??????
????#?QLoRA?config??
????bnb_config?=?BitsAndBytesConfig(??
????????load_in_4bit=True,??
????????bnb_4bit_quant_type="nf4",??
????????bnb_4bit_compute_dtype=torch_dtype,??
????????bnb_4bit_use_double_quant=True,??
????)??
??????
????#?LoRA?config??
????peft_config?=?LoraConfig(??
????????r=16,??
????????lora_alpha=32,??
????????lora_dropout=0.05,??
????????bias="none",??
????????task_type="CAUSAL_LM",??
????????target_modules=['up_proj',?'down_proj',?'gate_proj',?'k_proj',?'q_proj',?'v_proj',?'o_proj']??
????)??
??????
????#?Load?tokenizer??
????tokenizer?=?AutoTokenizer.from_pretrained(base_model)??
??????
????#?Load?model??
????model?=?AutoModelForCausalLM.from_pretrained(??
????????base_model,??
????????quantization_config=bnb_config,??
????????device_map="auto",??
????????attn_implementation=attn_implementation??
????)??
????model,?tokenizer?=?setup_chat_format(model,?tokenizer)??
????model?=?prepare_model_for_kbit_training(model)??

����ģ���Ѿ�׼���ý���ѵ�������ǿ��Դ������ݼ������Ǽ���mlabonne/orpo-dpo-mix-40k����ʹ��apply_chat_template()��������chosen���͡�rejected����ת��ΪChatML��ʽ����ע�⣬��ֻʹ����1,000���������������������ݼ�����Ϊ���������Ứ��̫��ʱ�䡣

????dataset_name?=?"mlabonne/orpo-dpo-mix-40k"??
????dataset?=?load_dataset(dataset_name,?split="all")??
????dataset?=?dataset.shuffle(seed=42).select(range(10))??
??????
????def?format_chat_template(row):??
????????row["chosen"]?=?tokenizer.apply_chat_template(row["chosen"],?tokenize=False)??
????????row["rejected"]?=?tokenizer.apply_chat_template(row["rejected"],?tokenize=False)??
????????return?row??
??????
????dataset?=?dataset.map(??
????????format_chat_template,??
????????num_proc=?os.cpu_count(),??
????)??
????dataset?=?dataset.train_test_split(test_size=0.01)??

���ȣ�������Ҫ����һЩ�������� ѧϰ�ʣ��봫ͳ��SFT����DPO��ȣ�ORPOʹ�õ�ѧϰ�ʷdz��͡����ֵ8e-6����ԭʼ���ģ����¶�Ӧ��SFT��ѧϰ��1e-5��DPO��ѧϰ��5e-6���ҽ�����������΢���н������ӵ���Լ1e-6�� beta�����������еIJ�������Ĭ��ֵΪ0.1������ԭʼ���ĵ�һ����¼��ʾ�����ͨ�������о�ѡ������ ��������������󳤶Ⱥ�������С��������Ϊ�����ܶ��ʹ��VRAM���ڴ�������ԼΪ20 GB������������£����ǽ���ģ�ͽ���3-5�����ڵ�ѵ�������������ǽ����1�����ڡ� ������ǿ���ʹ��ORPOTrainer��ѵ��ģ�ͣ����䵱һ����װ����

????orpo_args?=?ORPOConfig(??
????????learning_rate=8e-6,??
????????beta=0.1,??
????????lr_scheduler_type="linear",??
????????max_length=1024,??
????????max_prompt_length=512,??
????????per_device_train_batch_size=2,??
????????per_device_eval_batch_size=2,??
????????gradient_accumulation_steps=4,??
????????optim="paged_adamw_8bit",??
????????num_train_epochs=1,??
????????evaluation_strategy="steps",??
????????eval_steps=0.2,??
????????logging_steps=1,??
????????warmup_steps=10,??
????????report_to="wandb",??
????????output_dir="./results/",??
????)??
??????
????trainer?=?ORPOTrainer(??
????????model=model,??
????????args=orpo_args,??
????????train_dataset=dataset["train"],??
????????eval_dataset=dataset["test"],??
????????peft_config=peft_config,??
????????tokenizer=tokenizer,??
????)??
????trainer.train()??
????trainer.save_model(new_model)??

��L4 GPU�϶���1000����������ģ��ѵ����Լ��Ҫ2��Сʱ�������Dz鿴W&B��ͼ��

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) image

��loss����ʱ���ܻ�ӭ����Ͳ��ܻ�ӭ���֮��IJ��첢�����ԣ�ƽ���߽��׼ȷ�ȷֱ���Ը���0��0.5��

��ԭʼ�����У��������� Anthropic/hh-rlhf ���ݼ���161k����������ѵ��ģ�ͽ�����10��epochs����������������е�ʱ��Ҫ���öࡣ���ǻ���Llama3������ʵ�飬�����Ѻõ����ҷ��������ǵ���־����лJiwoo Hong����

�ڱ��̵̳Ľ�β�������ǽ�QLoRA�����������ģ�ͺϲ������������͵�Hugging Face Hub��

????#?Flush?memory??
????del?trainer,?model??
????gc.collect()??
????torch.cuda.empty_cache()??
??????
????#?Reload?tokenizer?and?model??
????tokenizer?=?AutoTokenizer.from_pretrained(base_model)??
????model?=?AutoModelForCausalLM.from_pretrained(??
????????base_model,??
????????low_cpu_mem_usage=True,??
????????return_dict=True,??
????????torch_dtype=torch.float16,??
????????device_map="auto",??
????)??
????model,?tokenizer?=?setup_chat_format(model,?tokenizer)??
??????
????#?Merge?adapter?with?base?model??
????model?=?PeftModel.from_pretrained(model,?new_model)??
????model?=?model.merge_and_unload()??
??????
????model.push_to_hub(new_model,?use_temp_dir=False)??
????tokenizer.push_to_hub(new_model,?use_temp_dir=False)??

��ϲ�����������Llama3��mlabonne/OrpoLlama-3-8B�Ŀ���΢���������ʹ�����Hugging Face Space��������һ��notebook�������Լ���ʵ������ʹ����������ģ��ѵ�����㣬����W&B������ǿ�����������һ���ʹ��LLM AutoEval��Nous�Ļ�׼�����׼��Ͻ�����һЩ������

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) image

���ǵ�ORPO΢��ʵ�����൱��������������˻���ģ����ÿ����׼�����ϵ����ܡ��������˹���ģ����Һܿ�����ζ��������40k�����Ͻ���΢���������ܺõĽ����

���ڿ�Դ������˵������һ���������ĵ�ʱ�̣�Խ��Խ��ĸ���������Ȩ��ģ�ͱ���������Դ�Ϳ���Ȩ��ģ��֮��IJ����������С����΢���ǻ�ȡ������������ܵ���Ҫ���ߡ�

ͨ¹ýORPO¼¼Êõ΢µ÷ llama3´óÄ£ÐÍ(Fine-tune Llama 3 with ORPO) image

����

����ƪ�̳��У����ǽ�����ORPO�㷨��������������ν�SFT���ලʽ΢������RLHFͳһΪ��һ�Ĺ��̡�Ȼ������ʹ��TRL��Transformer Reinforcement Learning����һ�����Ƶ�ƫ�����ݼ��ϵ�Llama3-8B����΢��������ģ��չʾ�����˹���Ľ������ͻ����ORPO��Ϊ�µ�΢����ʽ��DZ����

��ϣ������а��������Ƽ�������Colab�ʼDZ���΢�����Լ���Llama3ģ�͡��ڽ����������У����ǽ�������δ��������������ݼ���������һ�����������ӵĵ㡣

������²ο��ԣ�https://huggingface.co/blog/mlabonne/orpo-llama-3

С���Ƽ��Ķ�

�������������Ľ�Ϊ������Ϣ����������������ͬ���޹۵��֤ʵ��������

�����Ƶ����

����

ͬ������

����

ɨ��ά�����������ֻ��汾��

ɨ��ά����������΢�Ź��ںţ�

��վ�������������������ϴ��������ַ���İ�Ȩ���뷢�ʼ�[email protected]

��ICP��2022002427��-10 �湫��������43070202000427��© 2013~2025 haote.com ������