北京网站建设公司网站优化资讯flash做ppt的模板下载网站
北京网站建设公司网站优化资讯,flash做ppt的模板下载网站,百度制作公司网页,什么是网站开发框架一、SageMaker介绍Amazon SageMaker 是 AWS 提供的全托管机器学习平台#xff0c;它覆盖了从数据准备、模型训练、超参数调优到模型部署的完整流程#xff0c;我们可以通过 SageMaker#xff0c;轻松创建 Notebook 实例进行数据探索和实验#xff0c;也可以使用AWS的计算资…一、SageMaker介绍Amazon SageMaker 是 AWS 提供的全托管机器学习平台它覆盖了从数据准备、模型训练、超参数调优到模型部署的完整流程我们可以通过 SageMaker轻松创建 Notebook 实例进行数据探索和实验也可以使用AWS的计算资源在云端快速训练大规模模型无需管理底层服务器或集群。同时SageMaker 默认支持多种框架如 TensorFlow、PyTorch、MXNet和自定义容器方便我们在熟悉的环境中进行深度学习开发甚至对于需要快速验证模型或进行端到端部署的场景SageMaker 提供了托管推理服务让训练好的模型可以立即通过 API 被应用调用虽然 SageMaker 提供了全流程可视化的网页开发但是作为资深“调库码农”让我一下子使用网页反而有点不习惯因此我们今天主要介绍AWS的boto3这个库使用这个库提供的接口来完成训练全流程以下是boto3库的官方文档boto3文档https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installationAWS SageMakerhttps://us-west-2.console.aws.amazon.com/sagemaker/截屏2025-09-23 19.16.50在动手介绍 SageMaker 的接口之前咱们先得把本地的 AWS CLI 配置好通过 AWS CLI我们能安全地管理 AWS 账号的访问权限、设置默认区域w和输出格式同时让 boto3 能顺利地访问 SageMaker、S3 等服务我们首先在AWS的控制台左上角服务里面找到安全性、身份与合规性再进入IAM的服务控制台点击进入后找到右边的我的安全凭证申请一个访问凭证即可0a21013a-2066-4afa-b729-dba81f6ff3b593e7ab9a-7866-44b3-94cc-0ffacc4f2882然后我们再环境中下载AWS CLI具体命令如下Mac上的HomeBrew下载可以参考我的另一篇文章Mac上HomeBrew安装及换源教程# MacOSbrew install awscli# Ubuntusudo apt install awscli -y接着我们在终端中输入aws configure后按照提示配置好即可截屏2025-09-23 19.32.55二、SageMaker-API用例AWS 的 boto3 库功能非常强大它不仅提供了 SageMaker、S3 Bucket 的接口还涵盖了 AWS 上几乎所有服务的底层接口和高层封装为 SageMaker 提供了完整的 API 支持。因此今天我们将聚焦几个在实际使用中最常用的 API 接口通过示例演示如何快速完成从数据上传、训练启动到模型部署与推理的基本流程让你能够用 Python 脚本高效管理整个机器学习任务而在 boto3 中每一个 AWS 服务都会对应一个独立的 客户端client这些客户端就是我们与 AWS 服务交互的入口所有的 API 调用比如上传文件到 S3、启动 SageMaker 训练任务、创建 IAM 角色等都需要通过对应的客户端来完成相比于 AWS 控制台点点点的操作方式使用 boto3 让整个流程变得可编程和自动化数据层使用 s3 客户端上传训练数据或下载模型结果权限层通过 iam 客户端管理角色和策略保证任务安全合规训练层用 sagemaker 客户端一键启动训练任务指定镜像、参数和算力资源部署层调用 sagemaker 的 API 部署模型生成 Endpoint 并完成在线推理。Role角色AWS的SageMarker进行训练需要用到一个Role的概念这个Role角色是一种临时授权机制由于我们在训练的时候数据集一般储存在AWS的S3Bucket中也有可能需要训练时附加EC2服务而使用角色可以赋予SageMaker访问其他 AWS 服务如 S3、CloudWatch的权限当SageMaker运行训练任务时它会以这个角色的身份去读取数据集、写入模型输出等操作因此我们首先需要在IAM中创建一个SageMaker执行角色Execution Role并授予我们创建的这个角色AmazonS3FullAccess以及 AmazonSageMakerFullAccess 等必要策略有关Role的几个常见API如下查询当前账号下的所有Role在 IAM 中最直接的查询方式是调用 list_roles API它可以返回当前账号下的角色信息。不过需要注意的是list_roles 单次调用返回的结果数量有限如果账号下的角色很多就必须通过翻页机制才能拿到完整列表因此我们更多的是使用boto3 提供的 get_paginator这个API能够自动处理分页请求帮我们逐页取回所有结果而不需要手动拼接 Marker 或 NextToken 参数。通过 for page in paginator.paginate()我们就能方便地遍历账号内的所有角色信息非常适合在需要完整列出资源的场景下使用。import boto3boto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)iam boto_sess.client(iam)paginator iam.get_paginator(list_roles)for page in paginator.paginate():for role in page[Roles]:print(fRole Name: {role[RoleName]})print(f ARN: {role[Arn]})print(f Create Date: {role[CreateDate]})print(- * 60)5f582130-4e46-4ca5-af12-12763d0cf469创建一个Role并附加策略创建Role的时候我们更多可以通过 create_role API 在 IAM 中创建在创建时我们需要指定 信任策略Trust Policy用于定义 SageMaker 等服务是否能够扮演该角色。随后通过 attach_role_policy 为我们创建的角色附加访问其他服务的权限例如 AmazonSageMakerFullAccess 和 AmazonS3FullAccess以确保 SageMaker 在训练任务中能够正常读取 S3 数据、写入模型输出并调用相关服务如果指定的角色已存在可以使用 get_role 获取其信息避免重复创建最终该脚本会返回角色的 ARN供后续的 SageMaker 训练任务使用常见的训练任务中我们可以附加的权限有AmazonS3FullAccess允许读取和写入 S3 数据集、模型文件等AmazonSageMakerFullAccess允许创建和管理 SageMaker 训练任务、模型和端点CloudWatchFullAccess允许 SageMaker 将日志和指标写入 CloudWatch方便监控与调试AmazonEC2ContainerRegistryFullAccess允许 SageMaker 从 ECR 拉取自定义镜像AmazonDynamoDBFullAccess在需要持久化实验元数据时提供数据库访问能力。import boto3import jsonboto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)iam boto_sess.client(iam)role_name SkyXZ-Test-Roletrust_policy {Version: 2012-10-17,Statement: [{Effect: Allow,Principal: {Service: sagemaker.amazonaws.com},Action: sts:AssumeRole}]}try:role iam.create_role(RoleNamerole_name,AssumeRolePolicyDocumentjson.dumps(trust_policy),DescriptionSageMaker execution role)except iam.exceptions.EntityAlreadyExistsException:role iam.get_role(RoleNamerole_name)policies [arn:aws:iam::aws:policy/AmazonSageMakerFullAccess,arn:aws:iam::aws:policy/AmazonS3FullAccess]for p in policies:iam.attach_role_policy(RoleNamerole_name, PolicyArnp)print(fRole Created: {role[Role][Arn]})4898eeea-a882-4918-8c47-c50a4b29d530为已有的Role角色添加/删除策略有时候我们会遇到之前创建 Role 时赋予的权限不足如果再重新创建新的 Role 就显得有些冗余。此时更推荐的方式是直接在现有的 Role 上 添加或移除策略在 boto3 中我们可以使用 attach_role_policy 来为指定的角色附加新的托管策略也可以通过 detach_role_policy 将不需要的策略移除。这样不仅避免了重复创建角色的麻烦还能在保持最小权限原则的同时灵活调整 SageMaker 的访问范围。import boto3boto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)iam boto_sess.client(iam)role_name SkyXZ-Test-Role# 添加策略iam.attach_role_policy(RoleNamerole_name,PolicyArnarn:aws:iam::aws:policy/CloudWatchFullAccess)# 删除策略iam.detach_role_policy(RoleNamerole_name,PolicyArnarn:aws:iam::aws:policy/AmazonS3FullAccess)print(fUpdated policies for role: {role_name})删除已有的Role角色当我们需要删除一个Role角色的时候我们调用 delete_role API删除该角色但是在删除Role角色前我们需要保证这个Role下面没有附加的策略否则删除操作会失败因此我们首先需要通过 get_role 检查指定的角色是否存在如果存在则使用 list_attached_role_policies 获取该角色上所有已附加的策略并逐一调用 detach_role_policy 将它们移除在策略全部解绑后再调用 delete_role 删除该角色import boto3import jsonboto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)iam boto_sess.client(iam)role_name SkyXZ-Test-Roletry:role iam.get_role(RoleNamerole_name)print(fRole Found: {role_name})print(f ARN: {role[Role][Arn]})attached_policies iam.list_attached_role_policies(RoleNamerole_name)print(fFound {len(attached_policies[AttachedPolicies])} attached policies)for policy in attached_policies[AttachedPolicies]:policy_arn policy[PolicyArn]policy_name policy[PolicyName]print(fDetaching policy: {policy_name})iam.detach_role_policy(RoleNamerole_name, PolicyArnpolicy_arn)print(fDeleting role: {role_name})iam.delete_role(RoleNamerole_name)print(fRole {role_name} deleted successfully)except iam.exceptions.NoSuchEntityException:print(fRole {role_name} does not exist)except Exception as e:print(fError: {e})666d8be9-b475-4c9a-92d2-63ded863324dS3BucketS3Bucket 是 AWS 提供的一种高可用、可扩展的对象存储服务主要用于存放训练数据、模型文件以及其他资源。在使用 SageMaker 训练模型时我们通常可以将本地的数据集上传到 S3这样之后训练任务就可以直接从云端读取数据实现端到端的云端训练流程。同时S3 还支持版本管理、权限控制和跨区域复制等功能使我们在管理数据和模型文件时更加灵活和安全有关S3Bucket的几个常见API如下查询当前账号下的所有Bucket在 AWS 中我们可以通过 boto3 提供的 list_buckets API 查询当前账号下所有的 S3 Bucket并结合 get_bucket_location 可以获取每个 Bucket 所在的区域信息而通过 S3 Resource 对象遍历 Bucket 内的对象即可统计其存储大小这样不仅可以快速查看账号下有哪些 Bucket还能了解它们的区域分布和占用空间方便在上传训练数据或管理模型文件时做出合理规划。import boto3boto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)s3 boto_sess.client(s3)s3_res boto_sess.resource(s3)for bucket in s3.list_buckets()[Buckets]:name bucket[Name]region s3.get_bucket_location(Bucketname).get(LocationConstraint)size_mb sum(obj.size for obj in s3_res.Bucket(name).objects.all()) / (1024*1024)print(f{name} | Region: {region} | Size: {size_mb:.2f} MB)image-20250927203954306image-20250927204011683创建一个新的Bucket如果当前账号下没有可用的存储桶我们可以使用 create_bucket API 创建一个新的 S3 Bucket在创建时需要指定 Bucket 的名称以及所在的区域Region以确保数据存储在预期的位置创建完成后这个 Bucket 就可以用来上传训练数据、存放模型文件或保存其他资源为 SageMaker 的训练和推理任务提供云端存储支持。import boto3import osboto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)s3 boto_sess.client(s3)bucket_name skyxz-test-bucket-2025s3.create_bucket(Bucketbucket_name,CreateBucketConfiguration{LocationConstraint: Region})print(fS3 Bucket {bucket_name} Created)上传文件到Bucket创建好 S3 Bucket 后我们就可以将本地的数据集或资源上传到云端以便 SageMaker 训练任务直接读取在下述示例中我们使用 os.walk 遍历本地目录下的所有文件并通过 upload_file 将每个文件上传到指定的 Bucket 和路径Key下在这段代码中我还通过设置了一个合适的前缀Prefix来在 S3 中组织文件结构使数据管理更清晰import boto3, osboto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)s3 boto_sess.client(s3)bucket_name your-bucketlocal_dir ./my_local_datasets3_prefix lerobot-data/for root, dirs, files in os.walk(local_dir):for file in files:local_path os.path.join(root, file)relative_path os.path.relpath(local_path, local_dir)s3_key os.path.join(s3_prefix, relative_path).replace(\\, /)s3.upload_file(local_path, bucket_name, s3_key)print(fSuccess: {local_path} → s3://{bucket_name}/{s3_key})c8199629-1def-4dfe-bde6-2dd312b40336列出Bucket中的所有文件仅知道 S3 中有哪些 Bucket 并不足以管理数据我们通常还需要查看每个 Bucket 内具体存放了哪些文件我们可以通过 list_objects_v2 API 列出指定 Bucket 下符合前缀Prefix的所有对象返回结果中包含每个对象的 Key路径、大小和最后修改时间方便我们了解数据的结构和存储情况import boto3boto_sess boto3.Session(aws_access_key_idAccessKeyId,aws_secret_access_keyAccessKeySecret,region_nameRegion)s3 boto_sess.client(s3)bucket_name skyxz-test-bucket-2025s3_prefix training-dataresponse s3.list_objects_v2(Bucketbucket_name, Prefixs3_prefix)if Contents in response:for obj in response[Contents]:print(obj[Key], obj[Size], obj[LastModified])else:print(No Found Files)7285077c-2797-4bc5-b61d-713b368bc959删除Bucket中的文件在管理 S3 数据时如果发现某个文件或文件夹不再需要我们可以使用 delete_object API 将其删除通过指定 Bucket 名称和文件的 Key即可删除指定对象这种方式适用于单个文件的删除如果需要批量删除文件则可以结合 list_objects_v2 获取 Key 列表后循环调用 delete_object 或使用 delete_objects 批量删除。import boto3boto_sess boto3.Session(aws_access_key_idAccessKeyId,aws_secret_access_keyAccessKeySecret,region_nameRegion)s3 boto_sess.client(s3)bucket_name skyxz-test-bucket-2025key_to_delete training-data/example.txts3.delete_object(Bucketbucket_name, Keykey_to_delete)print(f{key_to_delete} have been {bucket_name} deleted)删除S3Bucket存储桶如果需要直接删除整个 Bucket我们必须先清空桶内的所有文件否则删除操作会失败我们首先需要使用 list_objects_v2 列出 Bucket 内的所有对象然后循环调用 delete_object 删除每个文件最后再调用 delete_bucket 删除整个存储桶这样可以安全、完整地移除不再使用的存储桶及其内容import boto3boto_sess boto3.Session(aws_access_key_idAccessKeyId,aws_secret_access_keyAccessKeySecret,region_nameRegion)s3 boto_sess.client(s3)bucket_name skyxz-test-bucket-2025objects s3.list_objects_v2(Bucketbucket_name)if Contents in objects:for obj in objects[Contents]:s3.delete_object(Bucketbucket_name, Keyobj[Key])s3.delete_bucket(Bucketbucket_name)print(f{bucket_name} have been deleted)从Bucket中下载文件在训练完成之后我们通常需要将训练结果或模型文件下载到本地进行验证或部署我们可以通过 list_objects_v2 获取指定前缀下的所有对象然后使用 download_file 将每个文件下载到本地指定目录import boto3, osboto_sess boto3.Session(aws_access_key_idAccessKeyId,aws_secret_access_keyAccessKeySecret,region_nameRegion)bucket prefix local_dir ./outputs3 boto_sess.client(s3)resp s3.list_objects_v2(Bucketbucket, Prefixprefix)for obj in resp.get(Contents, []):key obj[Key]if key.endswith(/):continuelocal_path os.path.join(local_dir, os.path.relpath(key, prefix))os.makedirs(os.path.dirname(local_path), exist_okTrue)s3.download_file(bucket, key, local_path)print(fDownloaded: {key} - {local_path})Notebook-Instance我们也可以使用create_notebook_instance 来创建一个Notebook实例同时等待实例创建完成之后获取这个示例的Url以及目前账户下的所有Notebook Instance实例我们可以直接复制这个Url到浏览器即可直接打开创建的实例import boto3import timerole_arn arn:aws:iam::your-account-id:role/your-role-nameboto_sess boto3.Session(aws_access_key_idAccessKey,aws_secret_access_keySecretKey,region_nameRegion)sagemaker_client boto_sess.client(sagemaker)notebook_name MyNotebookInstance-demo# 1. 创建 Notebook Instanceprint(f Create Notebook Instance: {notebook_name} )try:response sagemaker_client.create_notebook_instance(NotebookInstanceNamenotebook_name,InstanceTypeml.t3.medium,RoleArnrole_arn,DirectInternetAccessEnabled,VolumeSizeInGB10,Tags[{Key: Project, Value: Demo}],)print(Notebook Create Request Sent:, response[NotebookInstanceArn])except sagemaker_client.exceptions.ResourceInUse:print(Notebook Already Exists, Skipping Creation.)# 2. 等待 Notebook 启动print( Waiting for Notebook to Start... )while True:desc sagemaker_client.describe_notebook_instance(NotebookInstanceNamenotebook_name)status desc[NotebookInstanceStatus]print(fCurrent Status: {status})if status InService:print(Notebook Started Successfully!)breakelif status in [Failed, Deleting, Stopped]:raise RuntimeError(fNotebook Start Failed, Status: {status})time.sleep(30)# 3. 获取 Notebook 的访问 URLurl sagemaker_client.create_presigned_notebook_instance_url(NotebookInstanceNamenotebook_name)print( Notebook Access URL )print(url[AuthorizedUrl])# 4. 列出当前所有 Notebookprint(\n Current Accounts Notebook Instances )instances sagemaker_client.list_notebook_instances(MaxResults20)for nb in instances[NotebookInstances]:print(f- {nb[NotebookInstanceName]} | Status: {nb[NotebookInstanceStatus]})505d7c23-6961-4688-842b-26bf095da40d