소규모 언어 모델 (SLM)은 AI에 큰 영향을 미치고 있습니다. 그들은 효율적이고 비용 효율적으로 강력한 성능을 제공합니다. 눈에 띄는 예 중 하나는 Llama 3.2 3B입니다. RAG ( Rectrive-Augmented Generation ) 작업에서 예외적으로 잘 수행되어 계산 비용 및 메모리 사용량을 절감하면서 높은 정확도를 유지합니다. 이 기사는 LLAMA 3.2 3B 모델을 미세 조정하는 방법을 살펴 봅니다. 소규모 모델이 RAG 작업에서 어떻게 뛰어난 방법을 배우고 Compact AI 솔루션이 달성 할 수있는 것의 경계를 넓 힙니다.
Meta가 개발 한 LLAMA 3.2 3B 모델은 질문 답변, 요약 및 대화 시스템과 같은 작업을 위해 30 억 매개 변수를 갖춘 다국어 SLM입니다. 업계 벤치 마크에서 많은 오픈 소스 모델을 능가하고 다양한 언어를 지원합니다. 다양한 크기로 제공되는 LLAMA 3.2는 효율적인 계산 성능을 제공하며 모바일 및 에지 환경에서 더 빠르고 메모리 효율적인 배포를위한 양자화 된 버전을 포함합니다.
또한 읽기 : 상위 13 개 소규모 언어 모델 (SLM)
미세 조정은 SLM 또는 LLM을 의료, 법률 또는 RAG 응용 프로그램과 같은 특정 도메인 또는 작업에 적용하는 데 필수적입니다. 사전 훈련을 통해 언어 모델은 다양한 주제에서 텍스트를 생성 할 수 있지만 미세 조정은 도메인 별 또는 작업 별 데이터에 대한 모델을 관련성과 성능을 향상시킵니다. 모든 매개 변수를 미세 조정하는 높은 계산 비용을 해결하기 위해 PEFT (Parameter Efficient Fine-Tuning)와 같은 기술은 모델 매개 변수의 하위 집합 만 훈련하는 데 중점을두고 성능을 유지하면서 리소스 사용량을 최적화합니다.
이러한 PEFT 방법 중 하나는 낮은 순위 적응 (LORA)입니다.
LORA에서는 SLM 또는 LLM의 중량 매트릭스가 두 개의 저급 매트릭스의 생성물로 분해됩니다.
w = wa * wb
W에 M 행과 N 열이 있으면 M 행 및 R 열이있는 WA로 분해되고 R 행 및 N 열이있는 WB가 분해 될 수 있습니다. 여기서 r은 m 또는 n보다 훨씬 작습니다. 따라서 M*N 값을 교육하는 대신 r*(Mn) 값 만 훈련 할 수 있습니다. r을 우리가 선택할 수있는 과수기 동물 인 순위라고합니다.
def lora_linear (x) :<br> h = x @ w # 일반 선형<br> h = scale * (x @ w_a @ w_b) # 저급 업데이트<br> 반환 h
체크 아웃 : Lora 및 Qlora를 사용한 대형 언어 모델의 매개 변수 효율적인 미세 조정
LLAMA 3.2 3B 모델에서 LORA를 구현합시다.
위의 나무 늘보 버전을 설치하면 호환 Pytorch, Transformers 및 Nvidia GPU 라이브러리도 설치됩니다. Google Colab을 사용하여 GPU에 액세스 할 수 있습니다.
지금 구현을 봅시다!
Unsloth import에서 fastlanguagemodel, is_bfloat16_supported, train_on_responses_only 데이터 세트에서 import load_dataset, dataset trl import sfttrainer, apply_chat_template에서 Transformers에서 Training Arguments, DatacollatorforSeq2Seq, TextStreamer에서 토치 수입
max_seq_length = 2048 dtype = none # 자동 감지용 없음. load_in_4bit = true # 4 비트 양자화를 사용하여 메모리 사용을 줄입니다. 거짓일 수 있습니다. 모델, Tokenizer = FastLanguagemodel.from_pretrained ( model_name = "Unsloth/llama-3.2-3B-instruct", max_seq_length = max_seq_length, dtype = dtype, load_in_4bit = load_in_4bit, # TOKEN = "HF _...", # Meta-Llama/llama-3.2-11B와 같은 게이트 모델을 사용하는 경우 # 사용 ))
Unsloth가 지원하는 다른 모델의 경우이 문서를 참조 할 수 있습니다.
model = fastlanguagemodel.get_peft_model ( 모델, r = 16, target_modules = [ "q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj",], lora_alpha = 16, lora_dropout = 0, 바이어스 = "없음", use_gradient_checkpointing = "Unsloth", random_state = 42, use_rslora = false, loftq_config = 없음, ))
우리는 Rag 데이터를 사용하여 Finetune을 사용합니다. Huggingface에서 데이터를 다운로드하십시오.
DataSet = load_dataset ( "Neural-Bridge/Rag-Dataset-1200", Split = "Train")
데이터 세트에는 다음과 같이 세 가지 키가 있습니다.
DataSet ({feature : [ 'context', 'Question', 'Answer'], num_rows : 960})
데이터는 언어 모델에 따라 특정 형식이어야합니다. 자세한 내용은 여기를 참조하십시오.
따라서 데이터를 필요한 형식으로 변환하겠습니다.
def convert_dataset_to_dict (dataset) : dataSet_dict = { "즉각적인": [], "완성": [] } 데이터 세트의 행 : user_content = f "context : {row [ 'context']} \ nquestion : {row [ 'Question']}" Assistant_Content = Row [ 'Answer'] DataSet_dict [ "Prompt"]. Append ([[[ { "역할": "사용자", "컨텐츠": user_content} ]))) DataSet_dict [ "완료"]. Append ([[[ { "역할": "Assistant", "Content": Assistant_Content} ]))) DataSet_dict를 반환합니다 converted_data = convert_dataset_to_dict (dataSet) DataSet = dataset.from_dict (converted_data) DataSet = dataset.map (apply_chat_template, fn_kwargs = { "Tokenizer": Tokenizer})
데이터 세트 메시지는 다음과 같습니다.
SLM을 미세 조정하기 위해 트레이너를 초기화 할 수 있습니다.
트레이너 = sfttrainer ( 모델 = 모델, Tokenizer = Tokenizer, Train_Dataset = 데이터 세트, max_seq_length = max_seq_length, data_collator = DataCollatorforSeq2Seq (Tokenizer = Tokenizer), DataSet_num_Proc = 2, Packing = False, #은 짧은 시퀀스를 위해 5 배 더 빠르게 훈련 할 수 있습니다. args = training arguments ( per_device_train_batch_size = 2, gradient_accumulation_steps = 4, Warmup_steps = 5, # num_train_epochs = 1, # 전체 훈련 실행에 대해 설정하십시오. max_steps = 6, # 소수를 사용하여 테스트합니다 Learning_rate = 2E-4, fp16 = is_bfloat16_supported (), bf16 = is_bfloat16_supported (), logging_steps = 1, 최적 = "adamw_8bit", weight_decay = 0.01, lr_scheduler_type = "선형", 종자 = 3407, output_dir = "출력", report_to = "none", # wandb 등에 사용하십시오 ),) ))
일부 매개 변수에 대한 설명 :
응답 템플릿을 지정 하여만 응답에 대한 모델 열차를 만듭니다.
트레이너 = train_on_responses_only ( 훈련자, 습기_part = " user \ n \ n", response_part = " 어시스턴트 \ n \ n", ))
Trainer_stats = Trainer.Train ()
교육 통계는 다음과 같습니다.
추론을 위해 모델을 사용합시다.
fastlanguagemodel.for_inference (모델) 메시지 = [ { "역할": "사용자", "내용": "컨텍스트 : 하늘은 일반적으로 낮에는 분명합니다. 질문 : 물은 어떤 색입니까?"}, ]] 입력 = tokenizer.apply_chat_template ( 메시지, Tokenize = true, add_generation_prompt = true, return_tensors = "pt", ) .to ( "cuda") text_streamer = TextStreamer (Tokenizer, skip_prompt = true) _ = model.generate (input_ids = inputs, streamer = text_streamer, max_new_tokens = 128, use_cache = true, 온도 = 1.5, min_p = 0.1)
로라 가중치를 포함한 훈련 된 것을 저장하려면 아래 코드를 사용하십시오.
model.save_pretraind_merged ( "model", tokenizer, save_method = "merged_16bit")
체크 아웃 : 대형 언어 모델을 미세 조정하는 안내서
RAG 작업의 미세 조정 LLAMA 3.2 3B는 계산 비용을 줄이는 고성능을 제공하는 작은 모델의 효율성을 보여줍니다. LORA와 같은 기술은 정확도를 유지하면서 리소스 사용량을 최적화합니다. 이 접근법은 도메인 별 응용 프로그램을 강화하여 고급 AI가보다 접근 가능하고 확장 가능하며 비용 효율적이며 실제 도전에 대한 AI를 검색하고 민주화하는 혁신을 주도합니다.
또한 읽으십시오 : 메타 라마 3.2로 시작하십시오
A. Rag는 검색 시스템과 생성 모델을 결합하여 외부 지식에 접지하여 응답을 향상시켜 질문 답변 및 요약과 같은 작업에 이상적입니다.
Q2. 미세 조정을 위해 LLAMA 3.2 3B를 선택하는 이유는 무엇입니까?A. LLAMA 3.2 3B는 성능, 효율성 및 확장 성의 균형을 제공하여 RAG 작업에 적합한 동시에 계산 및 메모리 요구 사항을 줄입니다.
Q3. Lora 란 무엇이며 미세 조정을 어떻게 개선합니까?A. 저 순위 적응 (LORA)은 모든 모델 매개 변수 대신 저 순위 행렬 만 교육하여 자원 사용량을 최소화하여 제한된 하드웨어에 대한 효율적인 미세 조정을 가능하게합니다.
Q4. 이 기사에서 미세 조정에 어떤 데이터 세트가 사용됩니까?A. Hugging Face는 더 나은 작업 성능을 위해 LLAMA 3.2 3B 모델을 미세 조정하기 위해 컨텍스트, 질문 및 답변이 포함 된 Rag 데이터 세트를 제공합니다.
Q5. 미세 조정 모델을 Edge 장치에 배포 할 수 있습니까?A. 예, LLAMA 3.2 3B, 특히 양자화 된 형태로 Edge 및 모바일 환경에서 메모리 효율적인 배포에 최적화되어 있습니다.
위 내용은 미세 조정 라마 3.2 3B 헝겊 분석 - 분석 Vidhya의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!