>기술 주변기기 >일체 포함 >미세 조정 라마 3.2 3B 헝겊 분석 - 분석 Vidhya

미세 조정 라마 3.2 3B 헝겊 분석 - 분석 Vidhya

Joseph Gordon-Levitt
Joseph Gordon-Levitt원래의
2025-03-13 09:46:23327검색

소규모 언어 모델 (SLM)은 AI에 큰 영향을 미치고 있습니다. 그들은 효율적이고 비용 효율적으로 강력한 성능을 제공합니다. 눈에 띄는 예 중 하나는 Llama 3.2 3B입니다. RAG ( Rectrive-Augmented Generation ) 작업에서 예외적으로 잘 수행되어 계산 비용 및 메모리 사용량을 절감하면서 높은 정확도를 유지합니다. 이 기사는 LLAMA 3.2 3B 모델을 미세 조정하는 방법을 살펴 봅니다. 소규모 모델이 RAG 작업에서 어떻게 뛰어난 방법을 배우고 Compact AI 솔루션이 달성 할 수있는 것의 경계를 넓 힙니다.

목차

  • llama 3.2 3b는 무엇입니까?
  • Finetuning Llama 3.2 3B
  • 로라
  • 라이브러리가 필요합니다
  • 라이브러리를 가져옵니다
  • 모델과 토 케이저를 초기화하십시오
  • PEFT 모델을 초기화하십시오
  • 데이터 처리
  • 트레이너 매개 변수 설정
  • 모델을 미세 조정합니다
  • 모델을 테스트하고 저장하십시오
  • 결론
  • 자주 묻는 질문

llama 3.2 3b는 무엇입니까?

Meta가 개발 한 LLAMA 3.2 3B 모델은 질문 답변, 요약 및 대화 시스템과 같은 작업을 위해 30 억 매개 변수를 갖춘 다국어 SLM입니다. 업계 벤치 마크에서 많은 오픈 소스 모델을 능가하고 다양한 언어를 지원합니다. 다양한 크기로 제공되는 LLAMA 3.2는 효율적인 계산 성능을 제공하며 모바일 및 에지 환경에서 더 빠르고 메모리 효율적인 배포를위한 양자화 된 버전을 포함합니다.

미세 조정 라마 3.2 3B 헝겊 분석 - 분석 Vidhya

또한 읽기 : 상위 13 개 소규모 언어 모델 (SLM)

Finetuning Llama 3.2 3B

미세 조정은 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를 구현합시다.

라이브러리가 필요합니다

  • 풀다 - 2024.12.9
  • 데이터 세트 - 3.1.0

위의 나무 늘보 버전을 설치하면 호환 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가 지원하는 다른 모델의 경우이 문서를 참조 할 수 있습니다.

PEFT 모델을 초기화하십시오

 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 = 없음,
))

각 매개 변수에 대한 설명

  • R : Lora의 계급; 값이 높을수록 정확도가 향상되지만 더 많은 메모리를 사용합니다 (제안 : 8–128).
  • Target_Modules : 미세 조정 모듈; 더 나은 결과를 위해 모든 것을 포함하십시오
  • lora_alpha : 스케일링 계수; 일반적으로 순위 r의 두 배나 동일합니다.
  • LORA_DROPOUT : 드롭 아웃 속도; 최적화되고 빠른 교육을 위해 0으로 설정하십시오.
  • 바이어스 : 바이어스 유형; "없음"은 속도와 최소한 과적으로 최적화되어 있습니다.
  • use_gradient_checkpointing : 장기 텍스트 교육을위한 메모리를 줄입니다. "Unsloth"가 적극 권장됩니다.
  • Random_state : 재현 가능한 결과를 보장하는 결정 론적 실행을위한 시드 (예 : 42).
  • use_rslora : 알파 선택을 자동화합니다. 순위 안정화 된 LORA에 유용합니다.
  • loftq_config : 메모리 집약적이지만 더 나은 정확도를 위해 상위 R 단일 벡터로 LORA를 초기화합니다.

데이터 처리

우리는 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})

데이터 세트 메시지는 다음과 같습니다.

미세 조정 라마 3.2 3B 헝겊 분석 - 분석 Vidhya

트레이너 매개 변수 설정

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 등에 사용하십시오
	),)
))

일부 매개 변수에 대한 설명 :

  • PER_DEVICE_TRAIN_BATCH_SIZE : 장치 당 배치 크기; 더 많은 GPU 메모리를 활용하려면 증가하지만 비효율적 인 패딩을 지켜보십시오 (제안 : 2).
  • gradient_accumulation_steps : 추가 메모리 사용없이 더 큰 배치 크기를 시뮬레이션합니다. 더 부드러운 손실 곡선의 증가 (제안 : 4).
  • Max_steps : 총 교육 단계; 더 빠른 실행 (예 : 60)으로 설정하거나 전체 데이터 세트 패스 (예 : 1-3)에`num_train_epochs`를 사용하십시오.
  • Learning_rate : 훈련 속도와 수렴을 제어합니다. 낮은 요금 (예 : 2E-4)은 정확도를 향상 시키지만 훈련이 느립니다.

응답 템플릿을 지정 하여만 응답에 대한 모델 열차를 만듭니다.

 트레이너 = train_on_responses_only (
	훈련자,
	습기_part = " user  \ n \ n",
	response_part = " 어시스턴트  \ n \ n",
))

모델을 미세 조정합니다

 Trainer_stats = Trainer.Train ()

교육 통계는 다음과 같습니다.

미세 조정 라마 3.2 3B 헝겊 분석 - 분석 Vidhya

모델을 테스트하고 저장하십시오

추론을 위해 모델을 사용합시다.

 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로 시작하십시오

자주 묻는 질문

Q1. 헝겊이란?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.