
    ha                     P   S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJ	r	J
r
  SSKJr  SSKJr  SSKJrJrJrJrJrJrJrJr  \R0                  R3                  SS	5        S
\\   S\\R                     4S jrS\\\4   S\\\4   4S jrS\S\S\4S jr S r!\"S:X  a  \!" 5         gg)a  
Train Gemma 3 on the HuggingFaceH4/llava-instruct-mix-vsft dataset (single-image).

accelerate launch     --config_file examples/accelerate_configs/deepspeed_zero3.yaml     examples/scripts/sft_vlm_gemma3.py     --dataset_name HuggingFaceH4/llava-instruct-mix-vsft     --model_name_or_path google/gemma-3-4b-it     --per_device_train_batch_size 1     --output_dir Gemma-3-4B-SFT-MMIU     --dtype bfloat16     --use_peft     --lora_target_modules all-linear     --attn_implementation eager

Train Gemma 3 on the FanqingM/MMIU-Benchmark dataset (multi-image).

accelerate launch     --config_file examples/accelerate_configs/deepspeed_zero3.yaml     examples/scripts/sft_vlm_gemma3.py     --dataset_name FanqingM/MMIU-Benchmark     --dataset_train_split test     --model_name_or_path google/gemma-3-4b-it     --per_device_train_batch_size 1     --output_dir Gemma-3-4B-SFT-MMIU     --dtype bfloat16     --use_peft     --lora_target_modules all-linear     --attn_implementation eager
    N)DatasetDictload_dataset)hf_hub_downloadlist_repo_files)Image)AutoModelForImageTextToText)ModelConfigScriptArguments	SFTConfig
SFTTrainer	TrlParserget_kbit_device_mapget_peft_configget_quantization_configTRACKIO_SPACE_IDztrl-trackiomessagesreturnc                    / nU  H  nUR                  S/ 5      n[        U[        5      (       d  U/nU H  n[        U[        5      (       d  M  SU;   d  UR                  S5      S:X  d  M7  SU;   a  US   nOUnUc  MJ  [        R
                  " [        R                  " US   5      5      nUR                  UR                  S5      5        M     M     U$ )NcontentimagetypebytesRGB)
get
isinstancelistdictr   openioBytesIOappendconvert)r   image_inputsmsgr   elementr   s         Y/home/james-whalen/.local/lib/python3.13/site-packages/examples/scripts/sft_vlm_gemma3.pyprocess_vision_infor'   S   s    L'')R('4((iGG'4((g.@GKKPVDW[bDbg%#G,E#E$!JJrzz%.'ABE ''e(<=       samplesc           	      H   S/ 0n[        [        U S   5      5       H  n/ nU S   U    Hv  n [        US5       nUR                  5       nS S S 5        [        R                  " [
        R                  " W5      5      R                  S5      nUR                  SUS.5        Mx     US   R                  S
SU S   U   S./S.SUSU S   U   S./-   S.SSU S   U   S./S./5        M     U$ ! , (       d  f       N= f! [         a  n[        SU S	U 35         S nAM  S nAff = f)Nr   questioninput_image_pathrbr   r   )r   r   zError processing image z: systemtextcontext)r   r/   )roler   user	assistantoutput)rangelenr   readr   r   r    r"   r!   	Exceptionprint)	r)   formatted_samplescontimagesimg_pathf	img_bytesr   es	            r&   format_datarA   f   sB   #R(c'*-./ 23D9H(D)Q !I *

2::i#89AA%Hw?@ : 	*%,,!PYHZ[_H`/a.bcFvwWaObcgOh6i5j,jk$67S[K\]aKb2c1de	
 0&  *)  /zA3?@s/   C;C*
AC;*
C84C;;
D!DD!datasetdataset_namec                    [        USS9nU Vs/ s H  o3R                  S5      (       d  M  UPM     nnU He  n[        XSS9nUR                  SS5      n[        R
                  " USS9  [        R                  " US5       nUR                  U5        S S S 5        Mg     U R                  [        SS	S
S9n U $ s  snf ! , (       d  f       M  = f)NrB   )	repo_typez.zip)repo_idfilenamerE    T)exist_okr      )batched
batch_sizenum_proc)r   endswithr   replaceosmakedirszipfileZipFile
extractallmaprA   )	rB   rC   	all_filesr>   	zip_fileszip_filenamezip_pathextract_folderzip_refs	            r&   prepare_datasetr^      s    	BI%<IqF);II<!"<Zcd%--fb9
NT2__Xs+w~. ,+ " kk+tBkOGN = ,+s   B7B7B<<
C	c            	      |   [        [        [        [        45      n U R	                  5       u  pn[        SS9Ul        S Ul        UR                  S;   a  UR                  O[        [        UR                  5      n[        UR                  UR                  US9n[        U5      nUb  [        5       US'   XeS'   [        R                   " UR"                  4SUR$                  0UD6n['        UR(                  UR*                  S9nUR(                  S	:X  a  [-        XR(                  5      n[/        UUXR0                     UR2                  S
:w  a  XR4                     OS [7        U5      S9n	U	R9                  5         U	R;                  UR<                  5        UR>                  (       a  U	R?                  UR(                  S9  g g )NF)use_reentrant)autoN)revisionattn_implementationdtype
device_mapquantization_configtrust_remote_code)namezFanqingM/MMIU-Benchmarkno)modelargstrain_dataseteval_datasetpeft_config)rC   ) r   r
   r   r	   parse_args_and_configr   gradient_checkpointing_kwargs
max_lengthrd   getattrtorchmodel_revisionrc   r   r   r   from_pretrainedmodel_name_or_pathrg   r   rC   dataset_configr^   r   dataset_train_spliteval_strategydataset_test_splitr   train
save_model
output_dirpush_to_hub)
parserscript_argstraining_args
model_argsrd   model_kwargsrf   rj   rB   trainers
             r&   mainr      s   K@AF-3-I-I-K*K
26U2KM/#M
 !+ 0 0N BJPUWaWgWgHhE**&::L
 2*=&%8%:\".A*+'77%%9C9U9UYeE ;33+:T:TUG#<<!'+C+CD
 ==>@M@[@[_c@cW;;<im#J/G MMO }//0  )A)AB !r(   __main__)#__doc__r   rR   rT   rs   datasetsr   r   huggingface_hubr   r   PILr   transformersr   trlr	   r
   r   r   r   r   r   r   environ
setdefaultr   r   r'   stranyrA   r^   r   __name__ r(   r&   <module>r      s   2> 
 	   . <  4	 	 	 

  (- 8$t* ekk1B &c3h DdO 2[    0Cf zF r(   