Files
DS-LLM-TEMPLATE-FINETUNING/unsloth_compiled_cache/__pycache__/UnslothNashMDTrainer.cpython-310.pyc
T

206 lines
29 KiB
Plaintext
Raw Normal View History

2025-08-28 17:57:59 +00:00
o
:—°hDºã@dZddlmZddlZddlmZddlmZddlmZm Z m
Z
m Z m Z m
Z
mZmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
Z
mZmZmZmZm Z m!Z!m Z m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*mZm+Z+m,Z,m-Z-mZm.Z.m/Z/ddl+Z+ddlTddl0m1Z1m2Z2dd l3m4Z4ddlZddl5Z6dd
l7m8Z8ddlmZdd l9m:Z:m;Z<d d
d d
d
dœZ=ej>d d e=dddƒZ?e1GdddeƒƒZ@ GdddeƒZAGdddeAƒZBdS)z9
2025.8.9
2025.8.10
4.55.4
0.21.0
__UNSLOTH_VERSIONING__
é)ÚTensorN)Ú
functional)ÚAnyÚListÚOptionalÚTupleÚUnionÚDictÚSetÚCallable)&rÚBaseImageProcessorÚBasePairwiseJudger ÚDatasetÚEvalPredictionÚFeatureExtractionMixinÚGeometricMixtureWrapperÚIterableDatasetÚ NashMDConfigÚ
NashMDTrainerÚOnlineDPOTrainerÚOptimizerNamesrÚ PeftModelÚPreTrainedModelÚPreTrainedTokenizerBaseÚProcessorMixinÚSIMPLE_CHAT_TEMPLATEÚTrainerCallbackrÚ empty_cacheÚgenerate_model_cardÚget_comet_experiment_urlÚ
get_rewardÚis_conversationalÚis_peft_availableÚis_wandb_availableÚjinja2Úmaybe_apply_chat_templateÚnnÚosÚselective_log_softmaxÚtextwrapÚtorchÚtruncate_rightÚunwrap_model_for_generation)Ú*)Ú dataclassÚfield)ÚVersion)Ú nullcontext)ÚDataCollatorForSeq2SeqÚDataCollatorForLanguageModelingTF)Úepilogue_fusionÚ max_autotuneÚ
shape_paddingz
trace.enabledztriton.cudagraphs)ÚdynamicÚ fullgraphÚoptionsc
Ctj| d|jd¡ddd}tj| d¡ddd}g}t||ƒD](\}}| tj¡}tj|d| d¡d  d¡}tj
|dd}||} |  | ¡q! t  |¡}| |jd|jdf¡}|S)Néÿÿÿÿér)ÚchunksÚdim)r>Úindex©r>é)
r+ÚchunkÚreshapeÚshapeÚzipÚtoÚfloat32ÚgatherÚ unsqueezeÚsqueezeÚ logsumexpÚappendÚconcat)
Úlogitsr?Úchunked_logitsÚ
chunked_indexÚall_per_token_logpsÚ chunk_logitsÚ chunk_indexÚselected_logitsÚlogsumexp_valuesÚper_token_logps©rWúT/workspace/DS-LLM-TEMPLATE-FINETUNING/unsloth_compiled_cache/UnslothNashMDTrainer.pyÚchunked_selective_log_softmax"s  
rYceZdZUdZedddidZeeed<edddidZ ee
ed <eddd
idZ ee
ed <  
                            ! ! " #     $           $      % &  '         (      #    $   ) *         + ,   -   . /     d2‡fd0d1„ Z Z
S)3ÚUnslothNashMDConfigaö
Configuration class for the [`NashMDTrainer`].
Subclass of [`OnlineDPOConfig`] we can use all its arguments and add the following:
Parameters:
mixture_coef (`float` or `list[float]`, *optional*, defaults to `0.5`):
Logit mixture coefficient for the model and reference model. If a list of floats is provided then the
mixture coefficient is selected for each new epoch and the last coefficient is used for the rest of the
epochs.
helpzvLLM SamplingParams)ÚdefaultÚmetadataÚvllm_sampling_paramsr;z8Chunk size to reduce memory usage. -1 is most efficient.Úunsloth_num_chunksz'Maximum sequence length to truncate to.Úmax_seq_lengthFÚnor<éréúç-Cëâ6
?ç{®Gáz„?çÍÌÌÌÌÌì?ç+‡ÙÎ÷ï?ç:Œ0âŽyE>çð?çlinearçš™™™™™¹?ÚpassiveÚwarningTÚstepsrAéôéO
ÚO1ÚautoÚçÚ
adamw_8bitÚlengthÚ
every_saveÚlastéé@éÚsigmoidÚvllmçš™™™™™á?c’ s|dkr td|dƒ|dkrtd|dƒ|dur(|#dkr(|$dkr(d}d }#|ˆdur:d
d lm}“t|“ƒd d
ƒ}ˆ|…d
krBtdƒ|…dkrJtdƒ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/|d0| “d1|!“d2|"“d3|#“d4|$“d5|%“d6|&“d7|'“d8|(“d9|)“d:|*“d;|+“d<|,“d=|-“d>|.“d?|/“d@|0“dA|1“dB|2“dC|3“dD|4“dE|5“dF|6“dG|7“dH|8“dI|9“dJ|:“dK|;“dL|<“dM|=“dN|>“dO|?“dP|@“dQ|A“dR|B“dS|C“dT|D“dU|E“dV|F“dW|G“dX|H“dY|I“dZ|J“d[|K“d\|L“d]|M“d^|N“d_|O“d`|P“da|Q“db|R“dc|S“dd|T“de|U“df|V“dg|W“dh|X“di|Y“dj|Z“dk|[“dl|\“dm|]“dn|^“do|_“dp|`“dq|a“dr|b“ds|c“dt|d“du|e“dv|f“dw|g“dx|h“dy|i“dz|j“d{|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!rAza` is way too larger > 1! Consider decreasing it to 1e-1, otherwise gradient updates will explode!rorpÚunsloth_training_checkpointsrar)Ú cpu_countr<rbzUUnsloth: 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_kwargsrW) ÚFloatingPointErrorÚ
OverflowErrorÚmultiprocessingrÚmaxÚ MathErrorÚsuperÚ__init__r^r_r`)”Úselfrƒr„r…r†r‡r‰rrrrrrr“r”r•r–r—r™rrr r­r¿rÿrrrrrrrrrr r
r r r
rrrr^r_r`Úkwargsr©Ú __class__rWrXrNs˜  ÿþýüûúùø ÷
ö õ ô
óòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=Ã>Â?Á@ÀA¿B¾C½D¼E»FºG¹H¸I·JKµL´M³N²O±P°Q¯R®S­T¬U«VªW©X¨Y§Z¦[¥\¤]£^¢_¡` aŸbžcdœefšgh˜ijklmnopqrŽstŒuvŠwxˆyz{|}ƒ~ÿþýüûúùø ÷
ö õ ô
óòñ
zUnslothNashMDConfig.__init__)NNFFFraFr<r<NNrbrbrrcrdrerfrgrhrirjr;rkrlrrmrnTNroFrAFrorpNTFFFFFFrqrqFFFFrrrsFFNr;NNFrtFNrNr;NNTNFNNFrtrNNNNrurvNFFrwNNNNTFTFFNNrxNNFNFNFTrsNNNrtTFNryrzFNNFFNNFFFNFTNNr{r|rfNr}NTFr~rTNNr;N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__r0r^rrÚ__annotations__r_Úintr`rÚ
__classcell__rWrWrrXrZ3sB

þþþírZc eZdZdZddgZ              d0deeejfdeeejfdeeejdfd e e
d
e e d e e d e ee
efd
e ee
eee
ffde eeeeefde ede e egefde eedeejjejjjfde e ejejgejfddffdd
Ze ddƒZ!ddZ"ddZ#ddZ$dd „Z%d!d"„Z&d#d$„Z'  dd%d&„Z( d1dejd'eeeeje)ffd(e e*dejfd)d*„Z+   d2d+e ed,e ed-eeeedffd.d/„Z,‡Z-S)3Ú_UnslothNashMDTrainerrtÚtrlznash-mdN©NNÚmodelÚ ref_modelÚ reward_modelrÚargsÚ
data_collatorÚ
train_datasetÚ eval_datasetÚprocessing_classÚ peft_configÚcompute_metricsÚ callbacksÚ
optimizersÚpreprocess_logits_for_metricsÚreturncsztƒj||||||||| | |
| | |
|d|jj|_ggggggggggggdœ |_|jdur;g|jd<g|jd<dSdS)N)r&r'r(rr)r*r+r,r-Úreward_processing_classr.r/r0r1r2) úloss/klúobjective/entropyú
loss/scoreúrewards/probabilitiesúrewards/accuraciesúrewards/marginsú logps/chosenúlogps/rejectedúval/model_contain_eos_tokenúval/ref_contain_eos_tokenÚbetaÚ mixture_coefúrewards/chosenúrewards/rejected)rrr)r@Ú
_mixture_coefÚstatsr()rr&r'r(rr)r*r+r,r-r.r/r0r1r2rrWrXrŠsFñ
ò

þz_UnslothNashMDTrainer.__init__cCs<t|jtƒr|jj}|t|jƒkr|j|S|jdS|jS)Nr;)Ú
isinstancerCÚlistÚstateÚepochÚlen)rrHrWrWrXr@Æs "z"_UnslothNashMDTrainer.mixture_coefc Ct||jƒ}|j|d|d|jd}Wdƒn1swY|j |¡}|jdur>tƒr;t|tƒr;|  ¡}n
|}n|j |j¡}t
  ¡%t |||j|j
|jjd}|j|d|d|jd}Wdƒ||fS1sqwY||fS)NÚ input_idsÚattention_mask)rJrKÚgeneration_config)r&r'rLr@Údevice)r-Ú acceleratorÚgeneraterLÚ unwrap_modelr'r#rErÚget_base_modelr+Úno_gradrr@rM) rr&ÚpromptsÚunwrapped_policy_for_gen_ctxÚ model_outputÚpolicy_model_for_gmwÚref_model_for_gmwÚ
mixture_modelÚmixture_outputrWrWrXÚ_generate_completionsÎs<ýÿ


ûý
÷ñz+_UnslothNashMDTrainer._generate_completionsc C|djd}|dd|df}t||jj|jjƒ\}}tj|d|fddtj|d|fdd|ddœ}|dd|df}t||jj|jjƒ\}} tj|d|fddtj|d| fdd|ddœ}
||
fS)NrJrAr@rKÚraw©rJrKr[)rDr,r-Ú eos_token_idÚ pad_token_idr+Úcat) rrUrYrSÚcontext_lengthÚmodel_completion_idsÚmodel_completion_maskÚ
model_dataÚmixture_completion_idsÚmixture_completion_maskÚ mixture_datarWrWrXÚ_process_completionsþs$ÿýÿýz*_UnslothNashMDTrainer._process_completionsc Ct ¡&t|j|d|jj|ƒ\}}}t|j|d|jj|ƒ\}}}Wdƒn1s-wY|jjdurhtj|d|jj kdd}tj|d|jj kdd}|||jj8<|||jj8<||fS)NrJr;r@)
r+rRr!r(r-r^r)rÚanyr]) rrcrfr`Ú model_scoresÚmixture_scoresÚmodel_contain_eosÚmixture_contain_eosrWrWrXÚ_compute_rewardss

ÿ ÿü z&_UnslothNashMDTrainer._compute_rewardsc s|d}|jj|ddd|dfdd}dd|Dƒ}|jj|ddd|dfdd}dd|Dƒ}td|d iƒrpd
d|Dƒ}t ¡}| t¡fd d|Dƒ}fd d|Dƒ}d
d|Dƒ}fdd|Dƒ}|jj|tt ||ƒƒdd}t
j ||dj dS)Nr[rJT)Úskip_special_tokenscSóg|]}| ¡qSrW©Ústrip©Ú.0Ú
completionrWrWrXÚ
<listcomp>0óz8_UnslothNashMDTrainer._compute_judge.<locals>.<listcomp>cSrprWrqrsrWrWrXrv5rwÚpromptrcSóg|]}d|dœgqS©Ú assistant)ÚroleÚcontentrWrsrWrWrXrv7ó ÿcóg|]}ˆj|dqS©)Úmessages©Úrender)rtÚmessage©ÚtemplaterWrXrv<ócrr€rrsr…rWrXrv=r‡cSryrzrWrsrWrWrXrv?r~crr€rrsr…rWrXrvBr~)Ú
return_scores)rM)
r-Ú batch_decoder"r%Ú EnvironmentÚ from_stringrrrFrEr+ÚtensorrM) rrcrfr`rSÚmodel_data_completionsÚmixture_data_completionsÚ environmentÚ probabilityrWr…rXÚ_compute_judge+s:ÿÿÿ
ÿ
ÿ ýz$_UnslothNashMDTrainer._compute_judgec fdd}|||ƒ}t ¡-|jdur/| ¡
|||ƒ}Wdƒn1s)wYn||j|ƒ}Wdƒn1s?wY|dddˆdfdk}| |d¡}| |d¡}||fS)NcsP||d|dd}|jddˆddf}t||dddˆdfƒ}|S)NrJrK)rKrAr;)rNr))ÚdataÚoutputrNÚtoken_logprobs©r`rWrXÚcompute_logprobs_for_dataNszJ_UnslothNashMDTrainer._compute_logprobs.<locals>.compute_logprobs_for_datarKrru)r+rRr'Údisable_adapterÚ masked_fill)rr&rcr`r—Úmodel_logprobs_model_dataÚref_logprobs_model_dataÚmodel_padding_maskrWrrXÚ_compute_logprobsMs 



 ÿ û  z'_UnslothNashMDTrainer._compute_logprobsc Csv|d| d¡}t ¡||}| d¡}Wdƒn1s!wY|| d¡}|j||}| ¡||fS)Ngà?rA)Úsumr+rRr?Úmean) rrrÚscoreÚ log_ratioÚ
kl_div_logÚ kl_div_lossÚlossrWrWrXÚ_compute_lossesfs
 þz%_UnslothNashMDTrainer._compute_lossesc fdd} ˆjd | |ƒ¡ˆjd | |ƒ¡| d¡} | d¡}
ˆjd | | ƒ¡ˆjd | |
ƒ¡ˆjdurQˆjd | | ƒ¡ˆjd  | |
ƒ¡ˆjd
 | |ƒ¡| d¡ }ˆjd  | |ƒ¡| |
}ˆjd  | |ƒ¡|d
k ¡}ˆjd | |ƒ¡|ddd|dfˆjjkjdd}|ddd|dfˆjjkjdd}ˆjd | | ¡ƒ¡ˆjd | | ¡ƒ¡ˆjd ˆj¡ˆjd ˆj ¡dS)Ncsˆj |¡ ¡ ¡S©N)rNÚgather_for_metricsrŸÚitem)©rrWrXÚ gather_meanˆsz:_UnslothNashMDTrainer._log_statistics.<locals>.gather_meanr7r5rAr;r<rArBr8r6r:rr9rJr@r=r>r?r@)
rDrLr(Úfloatr-r]rhr?r@)rrcrfrrr Úkl_divr`rjrkÚmodel_logprobs_model_data_sumÚref_logprobs_model_data_sumÚentropy_model_dataÚmarginÚaccuracyÚ model_eosÚ mixture_eosrWrXÚ_log_statisticszs. 


  ((z%_UnslothNashMDTrainer._log_statisticsÚinputsÚnum_items_in_batchc s| ¡tttˆ ¡ƒƒƒ}ˆd}fddt|ƒDƒfddˆDƒfddˆDƒˆ ˆ¡ˆ ˆ¡ˆdjd}ˆdˆd|d œ}Šˆ  ||¡\}}ˆ 
|||¡\} }
ˆj durrˆ  | |
|¡\} } t
 | | ¡}
n d
\} } ˆ | |
|¡}
ˆ || |¡\}}ˆ |||
¡\}}}ˆ | |
| ¡||
| ¡| ¡|| | ¡
ˆjjdur·ˆjjˆjjd kr·tƒi}ˆjjtjtjfvrɈ ¡|d <ˆjjdkrÓ| ¡}ˆj ròt! "|ˆj#¡ }| Wdƒn1sìwYn
ˆj%j$|fi|¤Ž| ¡ˆjj&S)
Nrxcs"g|]
fddˆ ¡DƒqS)csi|] \}}||ˆqSrWrW)rtÚÚirWrXÚ
<dictcomp>½szB_UnslothNashMDTrainer.training_step.<locals>.<listcomp>.<dictcomp>)Úitems)rt)rXrv½ó"z7_UnslothNashMDTrainer.training_step.<locals>.<listcomp>csg|]}t|ˆjƒqSrW)r&r-©rtÚxr©rWrXrv¾r‡cs"g|]
}ˆ |ˆjjjˆj¡qSrW)Ú tokenize_rowr&ÚconfigÚis_encoder_decoderr-rWrXrv¿Úprompt_input_idsrAÚprompt_attention_maskr\r%rr)'ÚtrainrIÚnextÚiterÚvaluesÚranger*Ú_prepare_inputsrDrZrgr(rnrr}rrr´Údetachr)rrGÚ global_steprrÚLOMOÚADALOMOÚ_get_learning_rateÚn_gpurŸÚuse_apexÚampÚ
scale_lossÚ optimizerÚbackwardrN)rr&Ú
batch_sizerSr`rUrYrcrfrjrkrrr rÚ scaled_lossrW)rrXÚ
training_stepµsd

ý
ö   
ÿz#_UnslothNashMDTrainer.training_stepÚ
model_nameÚ dataset_nameÚtagsc
C| ¡sdSt|jjdƒrtj |jjj¡s|jjj}nd}|dur&tƒ}n
t |t
ƒr/|h}nt|ƒ}t|jjdƒr?|  d¡|  |j
¡t d¡}t|||j||tƒr]tjdur]tjjndtƒd|ddd }| tj |jjd
¡¡dS) 
Creates a draft of a model card using the information available to the `Trainer`.
Args:
model_name (`str` or `None`, *optional*, defaults to `None`):
Name of the model.
dataset_name (`str` or `None`, *optional*, defaults to `None`):
Name of the dataset used for training.
tags (`str`, `list[str]` or `None`, *optional*, defaults to `None`):
Tags to be associated with the model card.
_name_or_pathÚunsloth_versionÚunslotha @inproceedings{munos2024nash,
title = {{Nash Learning from Human Feedback}},
author = {R{'{e}}mi Munos and Michal Valko and Daniele Calandriello and Mohammad Gheshlaghi Azar and Mark Rowland and Zhaohan Daniel Guo and Yunhao Tang and Matthieu Geist and Thomas Mesnard and C{\^{o}}me Fiegel and Andrea Michi and Marco Selvi and Sertan Girgin and Nikola Momchev and Olivier Bachem and Daniel J. Mankowitz and Doina Precup and Bilal Piot},
year = 2024,
booktitle = {Forty-first International Conference on Machine Learning, {ICML} 2024, Vienna, Austria, July 21-27, 2024},
publisher = {OpenReview.net},
url = {https://openreview.net/forum?id=Y5AmNYiyCQ}
}zNash-MDz!Nash Learning from Human Feedbackz
2312.00886) Ú
base_modelrÙÚ wandb_urlÚ comet_urlÚ trainer_nameÚtrainer_citationÚ paper_titleÚpaper_idz README.md)Úis_world_process_zeroÚhasattrr&r(ÚpathÚisdirrÜÚsetrEÚstrÚaddÚupdateÚ
_tag_namesr*Údedentrr$ÚwandbÚrunÚurlr ÚsaveÚjoinr))rÚcitationÚ
model_cardrWrWrXÚcreate_model_cards8  

 

õz'_UnslothNashMDTrainer.create_model_card)NNNNNNNNNNNNr%Nr¦)NNN).rrrrrrr'ÚModulerr
rr rrÚdictrërr rrrrFrÚtupler+Ú OptimizerÚ lr_schedulerÚLambdaLRrrÚpropertyr@rZrgrnrrr´rr!r"rWrWrrXr#ï þ ýüûúùø ÷
ÿö