Files
DS-LLM-TEMPLATE-FINETUNING/unsloth_compiled_cache/__pycache__/UnslothOnlineDPOTrainer.cpython-311.pyc
T

365 lines
69 KiB
Plaintext
Raw Normal View History

2025-08-13 23:50:20 +00:00
§
4$h:ãó~dZddlmZddlZddlmZddlmZddlmZm Z m
Z
m Z m Z m
Z
mZmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
Z
mZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m Z m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4mZm5Z5m6Z6m7Z7m8Z8mZm9Z9m:Z:m;Z;m<Z<m=Z=mZm/Z/m5Z5mZmZm
Z
m Z m!Z!m%Z%m0Z0m5Z5mZddl5Z5ddlTddl>m?Z?m@Z@dd lAmBZBddlZddlCZDdd
lEmFZFddlmZdd lGmHZHmIZJd d
d d
d
dœZKejLd d eK¬¦«d¦«ZMdZNe?Gdde¦«¦«ZO Gdde%¦«ZPGddeP¦«ZQdS)z8
2025.8.4
2025.8.5
4.55.1
0.21.0
__UNSLOTH_VERSIONING__
é)ÚTensorN)Ú
functional)ÚAnyÚListÚOptionalÚTupleÚUnionÚDictÚSetÚCallable)@rÚAutoModelForCausalLMÚBaseImageProcessorÚBasePairwiseJudger ÚDPODataCollatorWithPaddingÚ DataCollatorÚ
DataLoaderÚDatasetÚEvalPredictionÚFeatureExtractionMixinÚGenerationConfigÚIterableDatasetÚOnlineDPOConfigÚOnlineDPOTrainerÚOptimizerNamesrÚPathÚ PeftModelÚPreTrainedModelÚPreTrainedTokenizerBaseÚProcessorMixinÚSIMPLE_CHAT_TEMPLATEÚTrainerÚTrainerCallbackr Úapply_chat_templateÚcreate_reference_modelÚdatasetsÚdisable_dropout_in_modelÚ empty_cacheÚgenerate_model_cardÚget_comet_experiment_urlÚ
get_rewardÚis_conversationalÚis_peft_availableÚis_wandb_availableÚjinja2ÚloggingÚmaybe_apply_chat_templateÚnnÚosÚprepare_deepspeedÚ seed_workerÚtextwrapÚtorchÚtruncate_rightÚunwrap_model_for_generationÚversionÚwarningsÚwrapsrr,r3r7rrrrr"r-r3r7)Ú*)Ú dataclassÚfield)ÚVersion)Ú nullcontext)ÚDataCollatorForSeq2SeqÚDataCollatorForLanguageModelingTF)Úepilogue_fusionÚ max_autotuneÚ
shape_paddingz
trace.enabledztriton.cudagraphs)ÚdynamicÚ fullgraphÚoptionscó’tj| d|jd¦«dd¬¦«}tj| d¦«dd¬¦«}g}t ||¦«D]\}}| tj¦«}tj|d| d¦«¬¦«  d¦«}tj
|d¬¦«}||z
} |  | ¦«Œ’ tj |¦«}| |jd|jdf¦«}|S)Néÿÿÿÿér)ÚchunksÚdim)rNÚindex©rNé)
r7ÚchunkÚreshapeÚshapeÚzipÚtoÚfloat32ÚgatherÚ unsqueezeÚsqueezeÚ logsumexpÚappendÚconcat)
ÚlogitsrOÚchunked_logitsÚ
chunked_indexÚall_per_token_logpsÚ chunk_logitsÚ chunk_indexÚselected_logitsÚlogsumexp_valuesÚper_token_logpss
úc/workspace/Fine-tuning/DS-LLM-TEMPLATE-FINETUNING/unsloth_compiled_cache/UnslothOnlineDPOTrainer.pyÚchunked_selective_log_softmaxrh"s5õ”[ §¢°°F´LÀÔ4DÑ!EÔ!EÐPQÐYZÐ[€NÝ”[ §¢¨rÑ!2Ô!2¸QÀaÐH€MØÐå%(¨¸Ñ%GÔ%Gð #—¥u¤}Ñ Ýœ, |¸2À{×G\ÒG\Ð]_ÑG`ÔG`Ða×iÐjlÑmˆÝ œ?¨<¸Ø)Ð,<Ñ<ˆØ×" Ýœ,Ð':ÑØ-×5°v´|ÀA´ÈÌ ÐUVÌÐ6XÑØ Ðóc ó0ddlm}|di|¤Ž}||_|S)Nr)ÚSamplingParams©)ÚvllmrkÚ _set_kwargs)ÚkwargsrkÚsampling_paramss rgÚvLLMSamplingParamsrq3s7Ø$. .€OØ"(€OÔØ Ðricó®eZdZUdZedddi¬¦«Zeeed<edddi¬¦«Z ee
ed < d/ˆfd.„ Z ˆxZ S)0ÚUnslothOnlineDPOConfigu¥
Configuration class for the [`OnlineDPOTrainer`].
This class includes only the parameters that are specific to Online DPO training. For a full list of training
arguments, please refer to the [`~transformers.TrainingArguments`] documentation. Note that default values in this
class may differ from those in [`~transformers.TrainingArguments`].
Using [`~transformers.HfArgumentParser`] we can turn this class into
[argparse](https://docs.python.org/3/library/argparse#module-argparse) arguments that can be specified on the
command line.
Parameters:
reward_model_path (`str` or `None`, *optional*, defaults to `None`):
Path to the reward model. Either `judge` or `reward_model_path` must be set, but not both.
judge (`str` or `None`, *optional*, defaults to `None`):
Name of the judge to use. Either `judge` or `reward_model_path` must be set, but not both.
max_new_tokens (`int`, *optional*, defaults to `64`):
Maximum number of tokens to generate per completion.
max_length (`int`, *optional*, defaults to `256`):
Maximum total length of the sequence (prompt + completion) used to compute log probabilities. If the
sequence exceeds this limit, the leftmost tokens will be truncated to preserve as much of the completion as
possible.
temperature (`float`, *optional*, defaults to `0.9`):
Temperature for sampling. The higher the temperature, the more random the completions.
missing_eos_penalty (`float` or `None`, *optional*, defaults to `None`):
Penalty applied to the score when the model fails to generate an EOS token. This is useful to encourage to
generate completions shorter than the maximum length (`max_new_tokens`). The penalty must be a positive
value.
beta (`float` or `list[float]`, *optional*, defaults to `0.1`):
Parameter controlling the deviation from the reference model. Higher β means less deviation from the
reference model. For the IPO loss (`loss_type="ipo"`), β is the regularization parameter denoted by τ in
the [paper](https://huggingface.co/papers/2310.12036). If a list of floats is provided then the β is
selected for each new epoch and the last β is used for the rest of the epochs.
loss_type (`str`, *optional*, defaults to `"sigmoid"`):
Type of loss to use. Possible values are:
- `"sigmoid"`: sigmoid loss from the original [DPO](https://huggingface.co/papers/2305.18290) paper.
- `"ipo"`: IPO loss from the [IPO](https://huggingface.co/papers/2310.12036) paper.
dataset_num_proc (`int` or `None`, *optional*, defaults to `None`):
Number of processes to use for processing the dataset.
disable_dropout (`bool`, *optional*, defaults to `True`):
Whether to disable dropout in the model and reference model.
use_vllm (`bool`, *optional*, defaults to `False`):
Whether to use vLLM for generating completions. Requires vLLM to be installed (`pip install vllm`).
vllm_model_impl (`str`, *optional*, defaults to `"vllm"`):
Model implementation to use for vLLM. Must be one of `"transformers"` or `"vllm"`. `"transformers"`: Use
the `transformers` backend for model implementation. `"vllm"`: Use the `vllm` library for model
implementation.
gpu_memory_utilization (`float`, *optional*, defaults to `0.55`):
The vLLM memory utilization. The default value is 0.55.
ds3_gather_for_generation (`bool`, *optional*, defaults to `True`):
This setting applies to DeepSpeed ZeRO-3. If enabled, the policy model weights are gathered for generation,
improving generation speed. However, disabling this option allows training models that exceed the VRAM
capacity of a single GPU, albeit at the cost of slower generation.
model_init_kwargs (`dict[str, Any]` or `None`, *optional*, defaults to `None`):
Keyword arguments to pass to `AutoModelForCausalLM.from_pretrained` when instantiating the model from a
string.
helpzvLLM SamplingParams)ÚdefaultÚmetadataÚvllm_sampling_paramsrKz8Chunk size to reduce memory usage. -1 is most efficient.Úunsloth_num_chunksFÚnorLéréúç-Cëâ6
?ç{®Gáz„?çÍÌÌÌÌÌì?ç+‡ÙÎ÷ï?ç:Œ0âŽyE>çð?çlinearçš™™™™™¹?ÚpassiveÚwarningTÚstepsrQéôéO
ÚO1ÚautoÚçÚ
adamw_8bitÚlengthÚ
every_saveÚlastéé@éÚsigmoidrmçš™™™™™á?c‘ óÌ|dkrtd|d¦«|dkrtd|d¦«||#dkr
|$dkrd}d }#|ˆ€!d
d lm}t |’¦«d zd ¦«}ˆ|…d
krt d
¦«|…dkrt d¦«t
¦«jdžid|d|d|d|d|d|d|d|d| “d|
d| d| d|
d|d|d|d |d!|d"|d#|d$|d%|d&|d'|d(|d)|d*|d+|d,|d-|d.|d/| “d0|!“d1|"“d2|#“d3|$“d4|%“d5|&“d6|'“d7|(“d8|)“d9|*“d:|+“d;|,“d<|-“d=|.“d>|/“d?|0“d@|1“dA|2“dB|3“dC|4“dD|5“dE|6“dF|7“dG|8“dH|9“dI|:“dJ|;“dK|<“dL|=“dM|>“dN|?“dO|@“dP|A“dQ|B“dR|C“dS|D“dT|E“dU|F“dV|G“dW|H“dX|I“dY|J“dZ|K“d[|L“d\|M“d]|N“d^|O“d_|P“d`|Q“da|R“db|S“dc|T“dd|U“de|V“df|W“dg|X“dh|Y“di|Z“dj|[“dk|\“dl|]“dm|^“dn|_“do|`“dp|a“dq|b“dr|c“ds|d“dt|e“du|f“dv|g“dw|h“dx|i“dy|j“dz|k“d{|l“d||m“d}|n“d~|o“d|p“d€|q“d|r“d|s“dƒ|t“d„|u“d…|v“d†|w“d‡|x“dˆ|y“d‰|z“dŠ|{“d||“dŒ|}“d|~“dŽ|d|€“d|d‘|‚“d’|ƒ“d“|„“d”|…“d•|†“d–|‡“d—|ˆ“d˜|‰“d™|Š“dš|‹“d›|Œ“dœ|d|Ž“|‘¤Ž||_||_ dS)ŸNgH¯¼šò×z>z Unsloth: Your learning rate of `zi` is too small and less than 1e-7! Consider increasing it, otherwise gradient updates will be close to 0!rQza` is way too larger > 1! Consider decreasing it to 1e-1, otherwise gradient updates will explode!r‡rˆÚunsloth_training_checkpointsryr)Ú cpu_countrzzUUnsloth: Please set a positive non-zero temperature since your results will be wrong.é
zgUnsloth: Please set a positive non-zero temperature less than 10, since sampling will be quite erratic.Ú
output_dirÚoverwrite_output_dirÚdo_trainÚdo_evalÚ
do_predictÚ
eval_strategyÚprediction_loss_onlyÚper_device_train_batch_sizeÚper_device_eval_batch_sizeÚper_gpu_train_batch_sizeÚper_gpu_eval_batch_sizeÚgradient_accumulation_stepsÚeval_accumulation_stepsÚ
eval_delayÚtorch_empty_cache_stepsÚ
learning_rateÚ weight_decayÚ
adam_beta1Ú
adam_beta2Ú adam_epsilonÚ
max_grad_normÚnum_train_epochsÚ max_stepsÚlr_scheduler_typeÚ warmup_ratioÚ warmup_stepsÚ log_levelÚlog_level_replicaÚlog_on_each_nodeÚ logging_dirÚlogging_strategyÚlogging_first_stepÚ
logging_stepsÚlogging_nan_inf_filterÚ
save_strategyÚ
save_stepsÚsave_total_limitÚsave_safetensorsÚsave_on_each_nodeÚsave_only_modelÚ'restore_callback_states_from_checkpointÚno_cudaÚuse_cpuÚuse_mps_deviceÚseedÚ data_seedÚ
jit_mode_evalÚuse_ipexÚbf16Úfp16Úfp16_opt_levelÚhalf_precision_backendÚbf16_full_evalÚfp16_full_evalÚtf32Ú
local_rankÚ ddp_backendÚ
tpu_num_coresÚtpu_metrics_debugÚdebugÚdataloader_drop_lastÚ
eval_stepsÚdataloader_num_workersÚdataloader_prefetch_factorÚ
past_indexÚrun_nameÚ disable_tqdmÚremove_unused_columnsÚ label_namesÚload_best_model_at_endÚmetric_for_best_modelÚgreater_is_betterÚignore_data_skipÚfsdpÚfsdp_min_num_paramsÚ fsdp_configÚ"fsdp_transformer_layer_cls_to_wrapÚaccelerator_configÚ deepspeedÚlabel_smoothing_factorÚoptimÚ
optim_argsÚ adafactorÚgroup_by_lengthÚlength_column_nameÚ report_toÚddp_find_unused_parametersÚddp_bucket_cap_mbÚddp_broadcast_buffersÚdataloader_pin_memoryÚdataloader_persistent_workersÚskip_memory_metricsÚuse_legacy_prediction_loopÚ push_to_hubÚresume_from_checkpointÚ hub_model_idÚ hub_strategyÚ hub_tokenÚhub_private_repoÚhub_always_pushÚ hub_revisionÚgradient_checkpointingÚgradient_checkpointing_kwargsÚinclude_inputs_for_metricsÚeval_do_concat_batchesÚ fp16_backendÚpush_to_hub_model_idÚpush_to_hub_organizationÚpush_to_hub_tokenÚ
mp_parametersÚauto_find_batch_sizeÚfull_determinismÚ torchdynamoÚ ray_scopeÚ ddp_timeoutÚ
torch_compileÚtorch_compile_backendÚtorch_compile_modeÚinclude_tokens_per_secondÚinclude_num_input_tokens_seenÚneftune_noise_alphaÚoptim_target_modulesÚbatch_eval_metricsÚ
eval_on_startÚuse_liger_kernelÚliger_kernel_configÚeval_use_gather_objectÚaverage_tokens_across_devicesÚreward_model_pathÚjudgeÚmax_new_tokensÚ
max_lengthÚ temperatureÚmissing_eos_penaltyÚ loss_typeÚdataset_num_procÚdisable_dropoutÚuse_vllmÚvllm_model_implÚgpu_memory_utilizationÚds3_gather_for_generationÚmodel_init_kwargsrl)
ÚFloatingPointErrorÚ
OverflowErrorÚmultiprocessingr™ÚminÚ MathErrorÚsuperÚ__init__rwrx)”Úselfrrr r­r¿rÿrrrrrrrrrr r
r r r
rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(rwrxror™Ú __class__s” €rgr/zUnslothOnlineDPOConfig.__init__s¿ ø€ðh ˜ Ð Õ'9ð;VÐ]jð;Vð;Vð;Vñ(Wô(Wð"WØ ˜ Ð ¥Mð3FÐUbð3Fð3Fð3Fñ%Gô%GðGØ Ð  -°7Ò":Ð":¸zÈSÒ?PÐ?PØ7ˆ ˆ Ð " 9 9¡;¤;¨q¡=°!Ñ Ø ˜!Ò Ð ÝÐ
˜
Ð
ÝðFñGôGð
Gð ŒÔðNNN#˜ðN <à#7Ð#7ðN Ngð N
$˜ð N *˜
N$8Ð#7ðN+FÐ*EðN*DÐ)CðN(@Ð'?ðN'>Ð&=ðN+FÐ*EðN'>Ð&=ðN$˜ðN'>Ð&=ðN*˜Mð!N <ð"(˜<ð#N <ð$$˜ð%N <ð&$˜ð'N <ð((˜<ð)N <ð**˜Mð+N <ð,/ð-N <ð."˜ ð/N <ð0!2Ð 1ð1N <ð2(˜<ð3N <ð4(˜<ð5N <ð6"˜ ð7N <ð8!2Ð 1ð9N <ð:/ð;N <ð<&˜+ð=N <ð>/ð?N <ð@"4Ð!3ðAN <ðB*˜MðCN <ðD&<Ð%;ðEN <ðF*˜MðGN <ðH$˜ðIN <ðJ/ðKN <ðL/ðMN <ðN!2Ð 1ðON <ðP.˜oðQN <ðR7^Ð6]ðSN <ðTgðUN <ðVgðWN <ðX,˜^ðYN <ðZ4ð[N <ð\"˜ ð]N <ð^*˜Mð_N <ð` xðaN <ðb4ðcN <ðd4ðeN <ðf,˜^ðgN <ðh&<Ð%;ðiN <ðj,˜^ðkN <ðl,˜^ðmN <ðn4ðoN <ðp$˜ðqN <ðr&˜+ðsN <ðt*˜MðuN <ðv!2Ð 1ðwN <ðxEðyN <ðz$8Ð#7ð{N <ð|$˜ð}N <ð~&<Ð%;ðN <ð@*DÐ)CðAN <ðB$˜ðCN <ðD xðEN <ðF(˜<ðGN <ðH%:Ð$9ðIN <ðJ&˜+ðKN <ðL&<Ð%;ðMN <ðN%:Ð$9ðON <ðP!2Ð 1ðQN <ðR/ðSN <ðT4ðUN <ðV#6Ð"5ðWN <ðX&˜+ðYN <ðZ2TÐ1Sð[N <ð\"4Ð!3ð]N <ð^"˜ ð_N <ð`&<Ð%;ðaN <ðbEðcN <ðd$˜ðeN <ðf"˜ ðgN <ðh.˜oðiN <ðj"4Ð!3ðkN <ðl"˜ ðmN <ðn*DÐ)CðoN <ðp!2Ð 1ðqN <ðr%:Ð$9ðsN <ðt%:Ð$9ðuN <ðv-JÐ,IðwN <ðx#6Ð"5ðyN <ðz*DÐ)Cð{N <ð|&˜+ð}N <ð~&<Ð%;ðN <ð@(˜<ðAN <ðB(˜<ðCN <ðD"˜ ðEN <ðF/ðGN <ðH.˜oðIN <ðJ(˜<ðKN <ðL&<Ð%;ðMN <ðN-JÐ,IðON <ðP*DÐ)CðQN <ðR&<Ð%;ðSN <ðT(˜<ðUN <ðV$8Ð#7ðWN <ðX(@Ð'?ðYN <ðZ!2Ð 1ð[N <ð\*˜Mð]N <ð^$8Ð#7ð_N <ð`/ðaN <ðb&˜+ðcN <ðd"˜ ðeN <ðf&˜+ðgN <ðh*˜MðiN <ðj%:Ð$9ðkN <ðl"4Ð!3ðmN <ðn)BÐ(AðoN <ðp-JÐ,IðqN <ðr#6Ð"5ðsN <ðt$8Ð#7ðuN <ðv"4Ð!3ðwN <ðx*˜MðyN <ðz/ð{N <ð|#6Ð"5ð}N <ð~&<Ð%;ðN <ð@-JÐ,IðAN <ðB!2Ð 1ðCN <ðDEðEN <ðF,˜^ðGN <ðH$˜ðIN <ðJ&˜+ðKN <ðL#6Ð"5ðMN <ðN"˜ ðON <ðP/ðQN <ðR.˜oðSN <ðT xðUN <ðV.˜oðWN <ðX&<Ð%;ðYN <ðZ)BÐ(Að[N <ð\!2Ð 1°Fð]NNN <ð^%9ˆÔ!Ø"4ˆÔÐÐri)NNFFFryFrLrLNNrzrzrr{r|r}r~rr€rrrKr„rr…r†TNr‡FrQFr‡rˆNTFFFFFFr‰r‰FFFFrŠrFFNrKNNFrŒFNrNrKNNTNFNNFrŒrNNNNrNFFrNNNNTFTFFNNrNNFNFNFTrNNNrŒTFNrrFNNFFNNFFFNFTNNr“r”r~Nr•NTFrmrTNNrK)
Ú__name__Ú
__module__Ú __qualname__Ú__doc__r?rwrrÚ__annotations__rxÚintr/Ú
__classcell__©r1s@rgrsrs8s{ø€ð<ð<ðz+0¨%ØØÐ+ñ+ô+И( 3œ-ððñð*/¨ØØÐ*ñ*ô*И #œððñð ØØØØØ$Ø&'Ø%&Ø#'Ø"&Ø&'Ø"#ØØ"%ØØØØØØØØØØØØØØØ!&ØØØØØØ27ØØØØØØØØØØØ!'ØØØØØØØØØ!"Ø%)ØØØØ $ØØ!&Ø $Ø Ø ØØØØ-1ØØ!$ØØØØØØ%)Ø Ø $Ø $Ø(-Ø"Ø%*ØØ!%ØØØØØØ!&Ø(,Ø%*Ø!%ØØ#Ø#'Ø ØØ ØØØØØ $Ø!Ø$)Ø(-ØØ Ø"Ø!&Ø(,Ø ØØØØØØØØØ Ø!%Ø$(Ø Øðcrrrrrrrrrr5rirsc"óöeZdZdZddgZ d*deeeje fdeeejdfdeeejdfd e
e d
e
e d e
e
d e
eeed
fde
eeee efd
fde
eeeeefde
ede
ede
eegefde
eedeejjejjjfde
eejejgejfddf ˆfd
Z e!d¦«Z"e#de$dedee e%ffd¦«Z&e'e(j)¦«de*fd¦«Z)e'e(j+¦«d+de
ee efde*fd¦«Z+dZ,dZ-d „Z. d+dejd!ee eeje%ffd"e
e/dejfd#„Z0 d+d$„Z1ˆfd%„Z2 d,d&e
e d'e
e d(ee ee dffd)„Z3ˆxZ4S)-Ú_UnslothOnlineDPOTrainerrŒÚtrlz
online-dpoN©NNÚmodelÚ ref_modelÚ reward_modelrÚargsÚ
data_collatorÚ
train_datasetzdatasets.DatasetÚ eval_datasetÚprocessing_classÚreward_processing_classÚ peft_configÚcompute_metricsÚ callbacksÚ
optimizersÚpreprocess_logits_for_metricsÚreturnc óÈt|d¦«r,t|d¦«rt|dd¦«dkrd|_||urtd¦«||_||t jdt¦«d}n||td¦«||_|
|_ ||_
|j |td¦«|td ¦«| €td
¦«|j pi}t|t¦«r|}| d ¦«}t|t j¦«s|d ks|nCt|t¦«rtt |¦«}||d <ntd
|d¦«t%j|fi|¤Ž}n|j td¦«|jj|_ |jr*t7|¦«|jt7|j¦«|d|_n ||_|j ¦«|j|j ¦«|t=| j¬¦«}|j |_ gggggggggggdœ |_!|jg|j!d<g|j!d<g|j!d<|jr`|j"|_#d|_$tKd!d|j&|j'ddddœtt|dtQ¦«¦«di¦«¤Ž|_)n-tU|j&|j'ddd|j+rdnd¬¦«|_)d|j,d<t[¦« .|||||| | |
||¬¦
«
t|j/d ¦«r|j/ 0|j1¦«|j2|_3|j4rh|j+tk|j|j6|j7|j8¦«|_|j-tk|j|j6|j7|j8¦«|_dSdS|j)|j 9|j:j;¦«|_|j+|j 9|j:j;¦«|_dSdS)"NÚ vllm_enginer$FTzš`model` and `ref_model` cannot be the same object. If you want `ref_model` to be the same as `model`, either omit the `ref_model` argument or pass `None`.z€Both `reward_model` and `judge` are provided. Please choose provide only one of them. Ignoring `judge` and using `reward_model`.z2Either `reward_model` or `judge` must be provided.z@`missing_eos_penalty` is not supported when `judge` is provided.z`args` must be provided.z$`processing_class` must be provided.Ú torch_dtyperzŽInvalid `torch_dtype` passed to `OnlineDPOConfig`. Expected either 'auto' or a string representing a `torch.dtype` (e.g., 'float32'), but got ú.z¦You passed `model_init_kwargs` to the `OnlineDPOConfig`, but your model is already instantiated. This argument can only be used when the `model` argument is a string.zfPEFT is not available and passed `peft_config`. Please install PEFT with `pip install peft` to use it.)Ú pad_token_id) ú objective/klúobjective/entropyúobjective/non_score_rewardúrewards/chosenúrewards/rejectedúrewards/accuraciesúrewards/marginsú logps/chosenúlogps/rejectedúval/contain_eos_tokenÚbetaúobjective/rlhf_rewardúobjective/scores_marginúobjective/scoresrrzé2r)Ú
max_tokensrÚtop_kÚtop_pÚ
detokenizerwrn)rrrcrdÚ do_sampleÚ use_cacheÚestimate_tokens)
r>rArBrCrDrErHrIrJrKÚadd_model_tagsrl)<ÚhasattrÚgetattrr$Ú
ValueErrorr?r;ÚwarnÚ UserWarningr@rFrr r(Ú
isinstanceÚstrÚgetr7Údtyper
Úfrom_pretrainedÚconfigÚis_encoder_decoderr-Ú ImportErrorrÚmerge_and_unloadr#r'r%ÚevalrrQrÚstatsrNÚllmÚ_last_loaded_steprkrrrqÚgeneration_configrrÚwarnings_issuedr.r/r>riÚ
_tag_namesr\Ú_betaÚis_deepspeed_enabledr4rVÚ acceleratorÚdevice)r0r>r?r@rrArBrCrDrErFrGrHrIrJrKr(Úmodel_idrOr1s €rgr/z!_UnslothOnlineDPOTrainer.__init__¹sTø€õ* 5˜  %­W°T¸:Ñ-FÔ-Fð˜˜j¨%Ñ0°EÒ9Ø $
Ø ˜Ð Ð ÝðXñôð
ð
Œà Ð Ð(9Ý ŒMðñ
ô
ð
ð
ˆEˆ
Ð
! e Ð (ˆÔØ'>ˆÔˆŒ
à Ô /°EÐ4EÝÐ ˆÐ  Ð Ð  Ô8°bÐÝ e  ؈
Ñ>ˆ˜+¥u¤{Ñ
°{ÀfÒ7LÐ7LÐP[ÐPcØÝ˜K­Ñ
Ý%¥e¨[Ñ9 Ø3>Ð!  ð^ØOZð^ð^ð^ñôðõ
ÐWÐEVÐWˆEˆEàÔ ð\ñôðð#(¤,Ô"AˆÔð ð" Ô ð $  Œ~Ð¬Ñ Ð ð
"&à&ˆDŒNØ ŒN× Ò Ñ  Ô Ð Ô ×  Ð Ý6ÐDTÔDaÐbˆMàœ/ˆŒðØ!#Ø*,Ø Ø "Ø"$ØØ Ø%'Øð 
ð 
ˆŒ
ð Ô Ð (Ø24ˆDŒJÐ /Ø46ˆDŒJÐ 1Ø-/ˆDŒJÐ Œ=ð ØÔ(ˆDŒHÀ1¨$Ô*@Õ_mð`ØØÔ ÔØØ ð
`ð`õ' $Ð(>Õ@RÑ@TÔ@TÑUÐWdÐfhÑ`ð`ÀdÔF\ÐF\õ&6Ø ÔØØØ#'Ô#>ÐH˜%˜%ÀDð
&ñ&ô&ˆ 48ˆÔÐ
Œ×ÒØØØØ!Ø*Gð ñ
ô
ð
õ 4”:Ð  ŒJ× % d¤oÑ ”YˆŒ
ð Ô
RØÔ Ð,Ý$5ØÔ% tÔ'GÈÌÐTXÔT]ñ%ô%ÔŒ~Ð)Ý!2Ø”N DÔ$DÀdÄiÐQUÔQZñ"ô"ð
Œ~Ð)Ø!%¤×!2Ò!2°4Ô3CÔ3JÑ!KÔ!KØÔ Ð,Ø$(Ô$5×$8Ò$8¸Ô9IÔ9PÑ$QÔ$QÔ,ricóÀt|jt¦«r>|jj}|t |j¦«kr
|j|n |jdS|jS)NrK)rorÚlistÚstateÚepochÚlen)r0r‡s rgr\z_UnslothOnlineDPOTrainer.betaŠsSå d”j¥$Ñ  Ø”JÔ$ˆEØ(-µ°D´J±´Ò(?Ð(?4”:˜$ÀTÄZÐPRÄ^Ð ”:Ð riruÚ tokenizercóL|sp||dd¬¦«}|jUt|d¦«}|dks|j|ddkr#|jg|dz|d<dg|dz|d<n||dd ¬¦«}d
| ¦«D¦«}|S) z2Tokenize a single row from a DPO specific dataset.ÚpromptF)Úadd_special_tokensNÚ input_idsrrQÚattention_maskTcó i|] \}}d||Œ S)Úprompt_rl)Ú.0ÚkeyÚvalues rgú
<dictcomp>z9_UnslothOnlineDPOTrainer.tokenize_row.<locals>.<dictcomp>Ÿs$ÐH©J¨C°˜3 Hri)Ú bos_token_idrˆÚitems)Úfeaturerur‰ÚbatchÚprompt_len_input_idss rgÚ tokenize_rowz%_UnslothOnlineDPOTrainer.tokenize_rowð JØI˜g /ÀEÐJˆÔ1Ý'*¨5°Ô+=Ñ'>Ô'>Ð'¨1Ò,° Ô0FÈ%ÐP[ÔJ\Ð]^ÔJ_Ò0_Ð0_Ø*3Ô*@Ð)AÀEÈ+ÔDVÑ)VE˜&Ø/0¨c°EÐ:JÔ4KÑ.K+øàI˜g /ÀDÐIˆH¸%¿+º+¹-¼-ÐHˆØˆ ricó°|jtd¦«|j}|j}|j||jj|jj|jjdœ}t|tj
j j ¦«s?| 
¦«|d<|jj|d<t|d<|jj|d<|j t'|fi|¤Ž¦«S)Nz+Trainer: training requires a train_dataset.©Ú
batch_sizeÚ
collate_fnÚ num_workersÚ
pin_memoryÚpersistent_workersÚsamplerÚ drop_lastÚworker_init_fnÚprefetch_factor)rCrlrBÚ_train_batch_sizerAror7ÚutilsÚdatarÚ_get_train_samplerr×r5rÚpreparer)r0rCrBÚdataloader_paramss rgÚget_train_dataloaderz-_UnslothOnlineDPOTrainer.get_train_dataloader£à Ô Ð Ð Ô
ØÔ*ˆ
àÔœ9Ôœ)Ô9Ø"&¤)Ô"Ið 
ð
Ðõ˜-­¬Ô)9Ô)IÑ XØ+/×+BÒ+BÑ+DÔ+DÐ ˜ (Ø-1¬YÔ-KÐ ˜ *Ý2=Ð Ð /Ø37´9Ô3WÐ Ð Ô×'­
°=Ð(VÐ(VÐDUÐ(VÐ(VÑWricó"||jtd¦«t|t¦«r|nd}t |d¦«r:||jvr1|jjr%|j  |j|¦«St|t¦«r
|j|n
||n|j}|j
}|jj ||jj |jj
|jjdœ}t|tjjj¦«s6| |¦«|d<|jj|d<|jj|d<t+|fi|¤Ž}|jjr$t |d¦«r ||j|<n ||i|_|j  |¦«S)Nz-Trainer: evaluation requires an eval_dataset.rxÚ_eval_dataloadersrœ)rDrlrorprjrArrBÚeval_batch_sizerÙr7rÚ_get_eval_samplerr×r)r0rDÚdataloader_keyrBÚeval_dataloaders rgÚget_eval_dataloaderz,_UnslothOnlineDPOTrainer.get_eval_dataloader»à Ð  DÔ$5Ð$=ÝÐ *4°LÅ#Ñ)FÔ)FИÈFˆå   Tà $Ô"8Д ÔÔ#×+¨DÔ,BÀ>Ô,RÑ ˜,­Ñ
#ˆDÔ ˜ ÐàÔ ðÔ*ˆ
ðœ)Ôœ9Ôœ)Ô9Ø"&¤)Ô"Ið 
ð
Ðõ˜,­¬ Ô(8Ô(HÑ XØ+/×+AÒ+AÀ,Ñ+OÔ+OÐ ˜ (Ø-1¬YÔ-KÐ ˜ *Ø37´9Ô3WÐ Ð % GÐ5FÐGˆØ Œ9Ô  KÝ
KØ9HÔ& 6à*8¸/Ð)JÔÔ×Ñ8ric ó¸‡ ‡
|jjŠ|jjŠ td|di¦«r>|j ||jd|j dd¬¦«¬¦«Š
n=|j  ||jd|j dd¬¦«¬¦«Š
ˆ
fdtd ¦«D¦«}ˆ
fd
td ¦«D¦«}td |D¦«¦«Šˆfd |D¦«}ˆˆ fd
|D¦«}|jj Š ˆ fd|D¦«}ˆˆ fd|D¦«}ˆ ˆ fd|D¦«}tj||jj¬¦«}tj||jj¬¦«}tj||jj¬¦«}tj||jj¬¦«}||||fS)Nrronline_dpo_trainer_lora_modelT)Ú load_tensors)Úuse_tqdmÚ lora_requestcóXg|]&}D]!}t|j|j¦«Œ"Œ'Srl)r…ÚoutputsÚ token_ids)rÚoutputrºs €rgú
<listcomp>z;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>ús:ø€ÐÐ\cÐdÐRX$˜vœ~¨aÔdrirzcóBg|]}D]}t|j¦«ŒŒSrl)r…Úprompt_token_ids)rÚ_r½s €rgz;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>ûs2ø€Ð\¸ÐT[Ð\È&•d˜\ric3ó4K|]}t|¦«VŒdS©rˆ)rÚidss rgú <genexpr>z:_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<genexpr>þs(èèÐ?¨S¥ C¡¤Ð?ricódg|],}dgt|¦«z
zdgt|¦«zzŒ-S)rrQ)rÚmax_prompt_lengths €rgz;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>ÿs>ø€ÐcÐQT˜/µ#°c±(´;¸q¸cÅCÈÁHÄH¹nÑcricóBg|]}gt|¦«z
z|zŒSrl)rrQs €€rgz;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>s2ø€ÐbÐPS|nÐ(9½CÀ¹H¼HÑ(DÑÑbricódg|],}dgt|¦«zdgt|¦«z
zzŒ-S)rQr)rrbs €rgz;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>s<ø€ÐdÈc˜A˜3¥ S¡¤™>¨Q¨C°:ÅÀCÁÄÑ3HÑ,IÑdricó^g|])}|dkrt|¦«kr|gzn|Œ*S)rK)rÚ eos_token_idrbs €€rgz;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>sTø€ð
ð
ð
àð%(¨¤G¨|Ò$;Ð$;ÅÀCÁÄÈ:Ò@UÐ@UˆC< Ð Ð[^ð
ð
ð
ricóBg|]}|gt|¦«z
zzŒSrl)rrbrQs €€rgz;_UnslothOnlineDPOTrainer._generate_vllm.<locals>.<listcomp>s0ø€ÐcÈS˜#  °*½sÀ3¹x¼xÑ2GÑ HÑcri©r)rErQr,rzÚchatr|r>Ú load_loraÚgenerateÚrangeÚmaxrbr7Útensorrr) r0r>ÚpromptsÚcompletion_idsÚ
prompt_idsÚ prompt_maskÚcompletion_maskrÌrbrQs @@@@@rgÚ_generate_vllmz'_UnslothOnlineDPOTrainer._generate_vllmës^øøøøø€ØÔ ØÔ ð
à å ˜°¬
Ð  tØ”h—mm G¨TÔ-CÈeÐdhÔdn×dxÒdxðzYðjnÐdxñeoôeopôpˆGˆ”h×°Ô1GÐRWÐhlÔhr×h|Òh|ð~]ðnrÐh|ñisôisÐtôtˆdÅUÈ1ÁXÄXÐØ\½UÀ1¹X¼XÐ
õ Ð?°JÐØcÐXbÐcˆ ØbÐWaÐbˆ
ØÔ6ˆ
ØdÐUcÐdˆð
ð
ð
ð
ð
à
ñ
ô
ˆðdÐcÐTbÐcˆõ”\ *°TÔ5EÔ5LÐMˆ
Ý”l ;°tÔ7GÔ7NÐOˆ Ýœ n¸TÔ=MÔ=TÐUˆÝœ, ¸tÔ?OÔ?VÐWˆà˜¸ÐGricójjj}jj}d|D¦«}ˆfd|D¦«}ˆfd|D¦«} |¦«} |¦«}|d dd¦«}|d dd¦«}t
|jjj ¬¦«5}| 
||j ¬ ¦«} ddd¦«n #1swxYwY| dd|  d¦«df}
t|
||¦«\}
} |||
| fS)
Ncóg|]}d|iŒS©rrl)rrs rgz6_UnslothOnlineDPOTrainer._generate.<locals>.<listcomp>sÐ8˜;ricó:g|]}t|j¦«ŒSrl)r1rE©rÚxr0s €rgz6_UnslothOnlineDPOTrainer._generate.<locals>.<listcomp>s'ø€ÐVÈ!Õ+¨A¨tÔ/DÑVricóRg|]#} |jj¦«Œ$Srl)rurEs €rgz6_UnslothOnlineDPOTrainer._generate.<locals>.<listcomp>s2ø€ÐgÐ[\$×# A tÔ'>ÀÔ@UÑgriÚprompt_input_idsrzrQÚprompt_attention_mask)Úgather_deepspeed3_params)rr|)rErQrBÚ_prepare_inputsÚrepeatr9rrAr'r|Úsizer8) r0r>rQÚinputsr×Úunwrapped_modelr½s ` rgÚ _generatez"_UnslothOnlineDPOTrainer._generateø€ØÔ ØÔ ð;°7Ð;ˆØVÈvÐØgÐ`fÐØ×# FÑð×% fÑØÐ/×6°q¸<ˆ
ØÐ5×<¸ÑBˆ Ý
#¸d¼iÔ>að
ñ
ô
ð à
Ø$×*Ø"&Ô"8ðôˆ ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð     :§?¢?°1Ñ#5Ô#5Ð#7Ð#7Ð 7Ô8ˆÝ*8¸ÈÐWcÑ*dÔ*dÑ'ˆ˜à˜¸ÐGsÃC/Ã/C3Ã6C3cóFt| d¦«| d¦«z|jz
d¦«}|dd|df}|dd|df}tj||fd¬¦«}tj||fd¬¦«}|||¬¦«} | d¦«}
|
dkr|
dz
nd} | jdd| df} tj|  d¬¦«| d¦«d¬¦«  d¦«}
|
S)NrQrrP)rKrz)
rr7Úcatr^Útake_along_dimÚ log_softmaxrYrZ)r0r>r×Únum_tokens_to_truncateÚprompt_completion_idsÚprompt_completion_maskr½Ú
prompt_lenÚ start_idxr^Úlogprobss rgÚ_forwardz!_UnslothOnlineDPOTrainer._forward.sMå!$ Z§_¢_°QÑ%7Ô%7¸.×:MÒ:MÈaÑ:PÔ:PÑ%PÐSWÔSbÑ%bÐdeÑ!fÔ!fÐð    Ð#9Ð#:Ð#:Ð :Ô;ˆ
Ø! ! ! !Ð%;Ð%<Ð%<Ð"<Ô=ˆ õ!&¤ ¨:°~Ð*FÈAÐ NÑ NÔ NÐÝ!&¤¨K¸Ð+IÈqÐ!QÑ!QÔ!QÐðÐ,Ð=SÐTˆð —__ 'ˆ
Ø&0°1¢n nJ NN¸!ˆ ؘq˜q˜q )¨B ,˜Ô/ˆõÔ×(:Ò(:¸rÐ(:Ñ(BÔ(BÀN×D\ÒD\Ð]_ÑD`ÔD`ÐfgÐh×pÐqsÑtˆØˆriÚnum_items_in_batchc óö‡=—| ¦«|d}t|¦«}jjr ||¦«\}}}} n ||¦«\}}}} t
j|jj kd¬¦«}
 
||||| ¦«} t
j ¦«5j  
j |||| ¦«} nO‰j
 ¦«5 
j
|||| ¦«} ddd¦«n #1swxYwYddd¦«n #1swxYwY| j}
j |d¬¦«}t#d|di¦«r d|D¦«}jÈt#d|di¦«rIt'j¦«}| t,¦«Š=ˆ=fd|D¦«}ˆ=fd „|D¦«}j |t/t1|d|||d¦«¦«¦«}t
jd
|D¦«|
¬ ¦«}nzd |z}t#d|di¦«r@d
t1||¦«D¦«}ˆfd|D¦«}d|D¦«}d|D¦«} |ddd¬¦«d |
¦«}|jd} |ddd¬¦«d |
¦«}t
j||fd¬¦«}t
j¦«5t?j |jj!|¦«\}}}jj"||
xxjj"zcc<ddd¦«n #1swxYwY| #|¦«\}}||k}t
j$||
¬ ¦«}|||zz}|||zz}t
j||fd¬¦«}| |}| |} |  %¦«}!|!|}"||"z &d¦«}#| |"z &d¦«}$t
j#|#|¦«\}%}&t
j#|$|¦«\}'}(|%|&z
})|'|(z
}*|)|*z
}+‰jj'dkrtQj)j*|+z¦« },n;‰jj'dkr|+dd j*zz z
d z},ntWdj'¦«|, ,¦«}-‰j í||||z
}.‰j-d .j/ 0|. ,¦«¦« ,¦« 1¦«¦«j-d .j/ 0| ,¦«¦« ,¦« 1¦«¦«j-d .|
 2¦« ,¦« 1¦«¦«j-d .j/ 0|%¦« ,¦« 1¦«¦«j-d .j/ 0|&¦« ,¦« 1¦«¦«| | z
}/|/ &d¦« ,¦«}0‰j-d .j/ 0|0¦« ,¦« 1¦«¦«j* |/z &d¦«}1|1 ,¦«}2‰j-d  .j/ 0|2¦« ,¦« 1¦«¦«j a||1z}3‰j-d! .j/ 0|3¦« ,¦« 1¦«¦«|  &d¦« ,¦« }4‰j-d" .j/ 0|4¦« ,¦« 1¦«¦«j*|%|'z
z}5‰j/ 0|5¦«}6‰j-d# .|6 ,¦« 1¦«¦«j*|&|(z
z}7‰j/ 0|7¦«}8‰j-d$ .|8 ,¦« 1¦«¦«|6|8z
}9‰j-d% .|9 ,¦« 1¦«¦«|9dk}:‰j-d& .|: 2¦« ,¦« 1¦«¦«j-d' .j*¦«jj3+‰j4j5jj3zdkrtm¦«i};‰jj7tpj9tpj:fvr ;¦«|;d(<jj<dkr|- ,¦«}-‰j=rMt| ?|-‰j@¦«5}<|< A¦«ddd¦«n #1swxYwYnj/jA|-fi|;¤Ž|- B¦«jjCz S))NrrKrPT)Úskip_special_tokensrcóg|]}d|dœgŒ S)Ú assistant)ÚroleÚcontentrl)rÚ
completions rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>as#ÐhÈj [¸hricó<g|]} |¬¦«ŒS©)Úmessages©Úrender)rrÚtemplates €rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>ls'ø€Ð˜8Ÿ?š?°F˜Rricó<g|]} |¬¦«ŒSrÿr)rrs €rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>ms'ø€Ð
˜š¸
˜Ñbricóg|]}|dkŒ S)rrl)rÚranks rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>vsÐ QÐ QÐ Q¨t ¨¢Ð QÐ QÐ Qrirzcóg|]
\}}||dœŒ S))rrl)rÚcs rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>|s$Ða¹t¸qÀ! q¸Ðaricó:g|]}t|j¦«ŒSrl)r$rF)rÚexampler0s €rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>}s(ø€ÐoÐ[bÕ¸Ô9UÑoricóg|]
}|dŒ Srl©rr s rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>~sИ7 Ericóg|]
}|dŒ S)rlr
s rgz:_UnslothOnlineDPOTrainer.training_step.<locals>.<listcomp>sÐM¸˜w MriÚptÚleft)ÚpaddingÚreturn_tensorsÚ padding_siderrQÚrightr•Úipozinvalid loss type r^r_r[rYrZrRrTr]rSrUrVrXrWr\)DÚtrainrˆrAr$r7ÚanyrEÚno_gradr?r>Údisable_adapterrÚ batch_decoder,rr/Ú EnvironmentÚ from_stringr!r…rUrFrVrTÚinference_moder+r@rQr ÚsplitÚarangeÚboolÚsumr!rÚ
logsigmoidr\ÚNotImplementedErrorÚmeanryr\rÚgather_for_metricsÚitemÚfloatr©r†Ú global_stepr(rÚLOMOÚADALOMOÚ_get_learning_rateÚn_gpuÚuse_apexÚampÚ
scale_lossÚ optimizerÚbackwardÚdetachr¦)>r0r>rÚcontain_eos_tokenrôÚ ref_logprobsrÚ completionsÚ environmentÚranks_of_first_completionÚmaskÚexamplesÚ prompts_idsÚcontext_lengthÚcompletions_idsrðÚscoresÚ
first_halfÚ second_halfÚ batch_rangeÚchosen_indicesÚrejected_indicesÚ
cr_indicesÚ cr_logprobsÚcr_ref_logprobsÚ padding_maskÚcr_padding_maskÚcr_logprobs_sumÚcr_ref_logprobs_sumÚchosen_logprobs_sumÚrejected_logprobs_sumÚchosen_ref_logprobs_sumÚrejected_ref_logprobs_sumÚ pi_logratiosÚ
ref_logratiosr^ÚlossesÚlossÚ
scores_marginÚklÚmean_klÚnon_score_rewardÚmean_non_score_rewardÚ rlhf_rewardÚ mean_entropyÚchosen_rewardsÚgathered_chosen_rewardsÚrejected_rewardsÚgathered_rejected_rewardsÚmarginÚaccuracyroÚ scaled_lossrs>` @rgÚ
training_stepz&_UnslothOnlineDPOTrainer.training_stepFs™ øø€ð  Š
Œ
ˆ
à˜Ôݘ‘\”\ˆ
à Œ9Ô ð fØGK×GZÒGZÐ[`ÐbiÑGjÔGjÑ DˆJ˜  ^°_°_àGKÇ~Â~ÐV[Ð]dÑGeÔGeÑ DˆJ˜  ^°_å!œI n¸Ô8MÔ8ZÒ&ZÐ`bÐà—=’= ¨
°KÀÐQ`ÑaˆÝ
Œ]‰_Œ_ð wð wØŒ~Ð#Ÿ}š}¨T¬^¸ZÈÐVdÐfuÑv à”Z×wðwØ#'§=¢=°´¸ÐVdÐfuÑ#vÔ#vwðwðwñwôwðwðwðwðwðwðwøøøðwðwðwðwð  wð wð wñ wô wð wð wð wð wð wð wøøøð wð wð wð wðˆØÔÐ]aÐ Ý ˜h¨°¬
Ð  iØhÐ\gÐhˆ Œ:Ð
! (¨G°A¬JÐ!7Ñ
cÝ2 Ø&×2Õ3GÑHØRÈ'ÐRØbÐVaÐb à(,¬
×(8Ò(8Øc +¨k¨z¨kÔ":¸
È È Ô<TÑ)ô)Ð ”<Ð QÐ QÐ7PÐ QÑ QÔ QÐZ`ÐaˆD‰Dð˜'kˆ  (¨G°A¬JÐ!7Ñ
NØaÅsÈ7ÐT_ÑG`ÔG`ÐaØoÐfnÐoØE¸HÐEØMÀHÐM ð× °dÈðôàôçš2˜f™:œ:ð
ð.¨qÔ1ˆNð T¸$ÈWðôàôçš2˜f™:œ:ð
õ
%*¤I¨{¸OÐ.LÐRSÐ$TÑ$TÔ$TÐ Ô
Pð
PÝÔ%Ð'<¸dÔ>ZÔ>gÐiwñ ô  6˜ ”9ÔÐ.°$´)Ô2OÑ
Pð
Pð
Pñ
Pô
Pð
Pð
Pð
Pð
Pð
Pð
Pøøøð
Pð
Pð
Pð
Pð'-§l¢l°:Ñ&>Ô&>Ñ #ˆJ˜ ð Ò,ˆ”l :°fРب°
Ñ(:Ñ;ˆØ&¨$°Ñ*;Ñõ”Y Ð0@ÐAÀqÐIˆ
ؘ*ˆ Ø& 2ˆð(×.ˆ Ø& 2ˆà&¨/Ð)9Ñ9×>¸AˆØ.°/Ð1AÑFÀqÑõ6;´ÐR\Ñ5]Ô5]ÑÐ2Ý=B¼[ÐI\Ð^hÑ=iÔ=iÑÐ!:Ø*Ð-BÑBˆ Ø/Ð2KÑKˆ
à 
Ñà Œ9Ô  )Ò ”l 4¤9¨vÑ#5Ñ6ˆFˆ