可以申请微信号的网站app代理推广合作
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:33
当前位置: 首页 > news >正文
可以申请微信号的网站,app代理推广合作,微网站建设哪家便宜,永久免费网页版linux在当今人工智能蓬勃发展的时代#xff0c;语言模型的性能优化和定制化成为研究与应用的关键方向。本文聚焦于 AWS SageMaker 平台上对 DeepSeek-R1-Distilled-Llama-8B 模型的精调实践#xff0c;详细探讨这一过程中的技术细节、操作步骤以及实践价值。 一、实验背景与目标 …在当今人工智能蓬勃发展的时代语言模型的性能优化和定制化成为研究与应用的关键方向。本文聚焦于 AWS SageMaker 平台上对 DeepSeek-R1-Distilled-Llama-8B 模型的精调实践详细探讨这一过程中的技术细节、操作步骤以及实践价值。 一、实验背景与目标 一语言模型发展趋势 随着自然语言处理技术的不断演进语言模型从基础架构的创新逐渐转向在特定场景下的性能优化和功能拓展。开发者们期望通过对预训练模型的精细调整使其在特定领域、任务中表现更为出色以满足多样化的应用需求。 二DeepSeek-R1-Distilled-Llama-8B 模型优势 DeepSeek-R1-Distilled-Llama-8B 模型融合了 DeepSeek-R1 的先进知识蒸馏技术与 Llama-8B 模型的架构优势。知识蒸馏使得小模型能够学习到大型模型的优秀特征在保持较小参数规模的同时具备强大的语言理解和生成能力。8B 的参数规模在性能与计算资源消耗之间达到了较好的平衡适合在多种场景下进行部署和应用。 三实验目标 本次实验旨在利用 AWS SageMaker 平台的强大计算资源和丰富工具对 DeepSeek-R1-Distilled-Llama-8B 模型进行精细调整提升其在特定任务如问答、文本生成等上的性能表现。通过实验探索如何优化模型训练过程提高模型的泛化能力和准确性为实际应用提供有力支持。 二、AWS SageMaker 平台概述 一SageMaker 核心功能 AWS SageMaker 是一个全托管的机器学习平台为开发者提供了从数据预处理、模型训练、模型部署到模型监控的一站式解决方案。它集成了多种主流的机器学习框架如 TensorFlow、PyTorch 等支持在不同规模的计算实例上进行训练和推理。在本次实验中我们将借助 SageMaker 的分布式训练功能加速 DeepSeek-R1-Distilled-Llama-8B 模型的精调过程。 二SageMaker 在模型开发中的优势 高效资源管理SageMaker 能够自动配置和管理计算资源根据模型训练的需求动态调整实例类型和数量。这不仅提高了资源利用率还降低了开发者的运维成本使他们能够专注于模型开发和优化。分布式训练支持对于大规模的语言模型训练分布式训练是关键。SageMaker 支持数据并行和模型并行等多种分布式训练策略能够充分利用多个计算节点的计算能力显著缩短训练时间。在精调 DeepSeek-R1-Distilled-Llama-8B 模型时分布式训练可以加快模型收敛速度提高训练效率。内置算法与工具SageMaker 提供了一系列内置的算法和工具如超参数调优、模型评估等。这些工具简化了模型开发流程帮助开发者快速找到最优的模型配置提升模型性能。 三、实验步骤详解 在这个演示中我们展示了如何使用 PyTorch FSDP、QLoRA、Hugging Face PEFT 和 bitsandbytes 对 DeepSeek-R1-Distill-Llama-8B 模型进行微调。 一我们正在使用 SageMaker 远程装饰器在 Amazon SageMaker 训练作业上运行微调任务 JupyterLab 实例类型ml.t3.medium Python 版本3.11 微调 实例类型ml.g5.12xlarge安装所需的库包括 Hugging Face 库并重启内核。 %pip install -r requirements.txt –upgrade %pip install -q -U python-dotenv 二设置配置文件路径 我们正在设置 config.yaml 文件所在的目录以便远程装饰器可以通过 SageMaker Defaults 使用这些设置。 本次实验使用 Hugging Face 容器用于 us-east-1 区域。确保您使用的是适合您 AWS 区域的正确镜像否则请编辑 config.yaml。容器镜像可在此处获取。 from dotenv import load_dotenv import os# Use .env in case of hidden variables load_dotenv()# Set path to config file os.environ[SAGEMAKER_USER_CONFIG_OVERRIDE] os.getcwd() 三可视化并上传数据集 我们将加载 rajpurkar/squad 数据集 import sagemakersagemaker_session sagemaker.Session() bucket_name sagemaker_session.default_bucket() default_prefix sagemaker_session.default_bucket_prefixfrom datasets import load_dataset import pandas as pddataset load_dataset(rajpurkar/squad) df pd.DataFrame(dataset[train]) df df.iloc[0:1000] df[answer] [answer[text][0] for answer in df[answers]] df df[[context, question, answer]]df.head()from sklearn.model_selection import train_test_splittrain, test train_test_split(df, test_size0.1, random_state42)print(Number of train elements: , len(train)) print(Number of test elements: , len(test)) 创建一个提示模板并加载一个随机样本的数据集以尝试摘要。 from random import randint# custom instruct prompt start prompt_template f|begin_of_text||start_header_id|user|end_header_id|\nContext:\n{{context}}\n\n{{question}}|eot_id||start_header_id|assistant|end_header_id|{{answer}}|end_of_text||eot_id|# template dataset to add prompt to each sample def template_dataset(sample):sample[text] prompt_template.format(contextsample[context],questionsample[question],answersample[answer])return sample 使用 Hugging Face Trainer 类对模型进行微调。定义我们想要使用的超参数。我们还创建一个 DataCollator它将负责填充我们的输入和标签。 from datasets import Dataset, DatasetDicttrain_dataset Dataset.from_pandas(train) test_dataset Dataset.from_pandas(test)dataset DatasetDict({train: train_dataset, test: test_dataset})train_dataset dataset[train].map(template_dataset, remove_columnslist(dataset[train].features))print(train_dataset[randint(0, len(dataset))][text])test_dataset dataset[test].map(template_dataset, remove_columnslist(dataset[test].features)) 为了训练我们的模型我们需要将输入文本转换为标记 ID。这是通过 Hugging Face Transformers Tokenizer 完成的。除了 QLoRA我们还将使用 bitsandbytes 4 位精度将冻结的 LLM 量化为 4 位并在其上附加 LoRA 适配器。 定义训练函数 model_id deepseek-ai/DeepSeek-R1-Distill-Llama-8Bfrom accelerate import Accelerator import datetime from huggingface_hub import snapshot_download import os from peft import AutoPeftModelForCausalLM, LoraConfig, get_peft_model, prepare_model_for_kbit_training from sagemaker.remote_function import remote import torch from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, set_seed import transformers import traceback# Start training remote(keep_alive_period_in_seconds0,volume_size100,job_name_prefixftrain-{model_id.split(/)[-1].replace(., -)},use_torchrunTrue,nproc_per_node4 ) def train_fn(model_name,train_ds,test_dsNone,lora_r8,lora_alpha16,lora_dropout0.1,per_device_train_batch_size8,per_device_eval_batch_size8,gradient_accumulation_steps1,learning_rate2e-4,num_train_epochs1,fsdp,fsdp_configNone,gradient_checkpointingFalse,merge_weightsFalse,seed42,tokenNone ):def init_distributed():# Initialize the process grouptorch.distributed.init_process_group(backendnccl, # Use gloo backend for CPUtimeoutdatetime.timedelta(seconds5400))local_rank int(os.environ[LOCAL_RANK])torch.cuda.set_device(local_rank)return local_rankif torch.cuda.is_available() and (torch.cuda.device_count() 1 or int(os.environ.get(SM_HOST_COUNT, 1)) 1):# Call this function at the beginning of your scriptlocal_rank init_distributed()# Now you can use distributed functionalitiestorch.distributed.barrier(device_ids[local_rank])os.environ.update({HF_HUB_ENABLE_HF_TRANSFER: 1})set_seed(seed)accelerator Accelerator()if token is not None:os.environ.update({HF_TOKEN: token})accelerator.wait_for_everyone()print(Downloading model , model_name)os.makedirs(/tmp/tmp_folder, exist_okTrue)snapshot_download(repo_idmodel_name, local_dir/tmp/tmp_folder)print(fDownloading model {model_name} under /tmp/tmp_folder)model_name /tmp/tmp_foldertokenizer AutoTokenizer.from_pretrained(model_name)# Set Tokenizer pad Tokentokenizer.pad_token tokenizer.eos_tokenwith accelerator.main_process_first():# tokenize and chunk datasetlm_train_dataset train_ds.map(lambda sample: tokenizer(sample[text]), remove_columnslist(train_ds.features))print(fTotal number of train samples: {len(lm_train_dataset)})if test_ds is not None:lm_test_dataset test_ds.map(lambda sample: tokenizer(sample[text]), remove_columnslist(test_ds.features))print(fTotal number of test samples: {len(lm_test_dataset)})else:lm_test_dataset Nonetorch_dtype torch.bfloat16# Defining additional configs for FSDPif fsdp ! and fsdp_config is not None:bnb_config_params {bnb_4bit_quant_storage: torch_dtype}model_configs {torch_dtype: torch_dtype}fsdp_configurations {fsdp: fsdp,fsdp_config: fsdp_config,gradient_checkpointing_kwargs: {use_reentrant: False},tf32: True}else:bnb_config_params dict()model_configs dict()fsdp_configurations dict()bnb_config BitsAndBytesConfig(load_in_4bitTrue,bnb_4bit_use_double_quantTrue,bnb_4bit_quant_typenf4,bnb_4bit_compute_dtypetorch_dtype,bnb_config_params)model AutoModelForCausalLM.from_pretrained(model_name,trust_remote_codeTrue,quantization_configbnb_config,attn_implementationflash_attention_2,use_cachenot gradient_checkpointing,cache_dir/tmp/.cache,model_configs)if fsdp and fsdp_config is None:model prepare_model_for_kbit_training(model, use_gradient_checkpointinggradient_checkpointing)if gradient_checkpointing:model.gradient_checkpointing_enable()config LoraConfig(rlora_r,lora_alphalora_alpha,target_modulesall-linear,lora_dropoutlora_dropout,biasnone,task_typeCAUSAL_LM)model get_peft_model(model, config)trainer transformers.Trainer(modelmodel,train_datasetlm_train_dataset,eval_datasetlm_test_dataset if lm_test_dataset is not None else None,argstransformers.TrainingArguments(per_device_train_batch_sizeper_device_train_batch_size,per_device_eval_batch_sizeper_device_eval_batch_size,gradient_accumulation_stepsgradient_accumulation_steps,gradient_checkpointinggradient_checkpointing,logging_strategysteps,logging_steps1,log_on_each_nodeFalse,num_train_epochsnum_train_epochs,learning_ratelearning_rate,bf16True,ddp_find_unused_parametersFalse,save_strategyno,output_diroutputs,**fsdp_configurations),data_collatortransformers.DataCollatorForLanguageModeling(tokenizer, mlmFalse),)trainer.train()if trainer.accelerator.is_main_process:trainer.model.print_trainable_parameters()if trainer.is_fsdp_enabled:trainer.accelerator.state.fsdp_plugin.set_state_dict_type(FULL_STATE_DICT)if merge_weights:output_dir /tmp/model# merge adapter weights with base model and save# save int 4 modeltrainer.model.save_pretrained(output_dir, safe_serializationFalse)if accelerator.is_main_process:# clear memorydel modeldel trainertorch.cuda.empty_cache()# load PEFT modelmodel AutoPeftModelForCausalLM.from_pretrained(output_dir,torch_dtypetorch.float16,low_cpu_mem_usageTrue,trust_remote_codeTrue,)# Merge LoRA and base model and savemodel model.merge_and_unload()model.save_pretrained(/opt/ml/model, safe_serializationTrue, max_shard_size2GB)else:trainer.model.save_pretrained(/opt/ml/model, safe_serializationTrue)if accelerator.is_main_process:tokenizer.save_pretrained(/opt/ml/model)accelerator.wait_for_everyone()train_fn(model_id,train_dstrain_dataset,test_dstest_dataset,per_device_train_batch_size2,per_device_eval_batch_size1,gradient_accumulation_steps2,gradient_checkpointingTrue,num_train_epochs1,fsdpfull_shard auto_wrap offload,fsdp_config{backward_prefetch: backward_pre,cpu_ram_efficient_loading: True,offload_params: True,forward_prefetch: False,use_orig_params: False},merge_weightsTrue ) 四加载微调模型 注意使用 merge_weightsTrue 运行 train_fn 以合并训练好的适配器 下载模型 import boto3 import sagemakersagemaker_session sagemaker.Session()model_id deepseek-ai/DeepSeek-R1-Distill-Llama-8Bbucket_name sagemaker_session.default_bucket() default_prefix sagemaker_session.default_bucket_prefix job_prefix ftrain-{model_id.split(/)[-1].replace(., -)}def get_last_job_name(job_name_prefix):sagemaker_client boto3.client(sagemaker)search_response sagemaker_client.search(ResourceTrainingJob,SearchExpression{Filters: [{Name: TrainingJobName,Operator: Contains,Value: job_name_prefix},{Name: TrainingJobStatus,Operator: Equals,Value: Completed}]},SortByCreationTime,SortOrderDescending,MaxResults1)return search_response[Results][0][TrainingJob][TrainingJobName]job_name get_last_job_name(job_prefix)job_name 推理配置 import sagemaker from sagemaker import get_execution_role from sagemaker import Model instance_count 1 instance_type ml.g5.4xlarge health_check_timeout 700 image_uri sagemaker.image_uris.retrieve(frameworkdjl-lmi,regionsagemaker_session.boto_session.region_name,versionlatest )image_uri if default_prefix:model_data fs3://{bucket_name}/{default_prefix}/{job_name}/{job_name}/output/model.tar.gz else:model_data fs3://{bucket_name}/{job_name}/{job_name}/output/model.tar.gzmodel Model(image_uriimage_uri,model_datamodel_data,roleget_execution_role(),env{HF_MODEL_ID: /opt/ml/model, # path to where sagemaker stores the modelOPTION_TRUST_REMOTE_CODE: true,OPTION_ROLLING_BATCH: vllm,OPTION_DTYPE: bf16,OPTION_TENSOR_PARALLEL_DEGREE: max,OPTION_MAX_ROLLING_BATCH_SIZE: 1,OPTION_MODEL_LOADING_TIMEOUT: 3600,OPTION_MAX_MODEL_LEN: 4096} ) model_id deepseek-ai/DeepSeek-R1-Distill-Llama-8Bendpoint_name f{model_id.split(/)[-1].replace(., -)}-djl predictor model.deploy(endpoint_nameendpoint_name,initial_instance_countinstance_count,instance_typeinstance_type,container_startup_health_check_timeouthealth_check_timeout,model_data_download_timeout3600 ) 预测 import sagemaker sagemaker_session sagemaker.Session() model_id deepseek-ai/DeepSeek-R1-Distill-Llama-8Bendpoint_name f{model_id.split(/)[-1].replace(., -)}-djl predictor sagemaker.Predictor(endpoint_nameendpoint_name,sagemaker_sessionsagemaker_session,serializersagemaker.serializers.JSONSerializer(),deserializersagemaker.deserializers.JSONDeserializer(), ) base_prompt f|begin_of_text||start_header_id|user|end_header_id|{{question}}|eot_id||start_header_id|assistant|end_header_id| prompt base_prompt.format(questionWhat statue is in front of the Notre Dame building?)response predictor.predict({inputs: prompt,parameters: {temperature: 0.2,top_p: 0.9,return_full_text: False,stop: [|eot_id|, |end_of_text|]} })response response[generated_text].split(|end_of_text|)[0]response 删除端点 predictor.delete_model() predictor.delete_endpoint(delete_endpoint_configTrue) 四、实验结果与分析 一性能指标对比 将精调后的 DeepSeek-R1-Distilled-Llama-8B 模型与预训练模型在相同任务上进行性能对比。结果显示精调后的模型在准确率、F1 值等指标上有显著提升表明精调过程有效地提高了模型在特定任务上的性能表现。 二结果分析 优势分析精调后的模型能够更好地理解和处理特定任务的数据生成更准确、更符合需求的回答。这得益于在精调过程中模型学习了目标任务的特定模式和知识增强了对任务的适应性。局限性分析尽管精调后的模型性能有所提升但仍然存在一些局限性。例如在处理一些复杂的、语义模糊的问题时模型的回答可能不够准确或完整。这可能是由于数据集的覆盖范围有限或者模型的架构在处理复杂语义时存在一定的困难。 五、总结与展望 一实验总结 本次实验在 AWS SageMaker 平台上成功对 DeepSeek-R1-Distilled-Llama-8B 模型进行了精调通过合理配置实验环境、选择合适的精调算法和优化策略提升了模型在特定任务上的性能。实验结果表明SageMaker 平台为语言模型的精调提供了强大的支持QLoRA 算法在减少计算成本的同时有效地提高了模型性能。 二未来展望 模型改进方向进一步探索更先进的精调算法和技术如基于注意力机制的优化方法以提高模型对复杂语义的理解和处理能力。同时尝试增加数据集的规模和多样性提高模型的泛化能力。应用拓展将精调后的模型应用到更多的实际场景中如智能客服、智能写作等领域验证模型的实用性和有效性。通过实际应用的反馈不断优化模型提升用户体验。
- 上一篇: 可以免费做网站wordpress转化为中文版
- 下一篇: 可以随意建国际商城的网站吗沈阳高端网页
相关文章
-
可以免费做网站wordpress转化为中文版
可以免费做网站wordpress转化为中文版
- 技术栈
- 2026年03月21日
-
可以免费秒玩游戏的网站湖北公司网站备案严格吗
可以免费秒玩游戏的网站湖北公司网站备案严格吗
- 技术栈
- 2026年03月21日
-
可以免费发布招聘网站室内装修设计自学入门
可以免费发布招聘网站室内装修设计自学入门
- 技术栈
- 2026年03月21日
-
可以随意建国际商城的网站吗沈阳高端网页
可以随意建国际商城的网站吗沈阳高端网页
- 技术栈
- 2026年03月21日
-
可以推广网站企业宣传片文案范文
可以推广网站企业宣传片文案范文
- 技术栈
- 2026年03月21日
-
可以玩h5的网站有没有专门做线下活动的网站
可以玩h5的网站有没有专门做线下活动的网站
- 技术栈
- 2026年03月21日
