石家庄住房和建设局网站wordpress修改后台没反应
石家庄住房和建设局网站,wordpress修改后台没反应,用linux做网站,哪里有网站可以做动态视频倒计时华为云ModelArts实战避坑手册#xff1a;从OBS存储到Notebook调试的深度解析
第一次接触华为云ModelArts#xff0c;看着控制台里琳琅满目的功能模块#xff0c;是不是有点无从下手#xff1f;很多开发者#xff0c;包括我自己刚开始的时候#xff0c;都卡在了OBS存储配置…华为云ModelArts实战避坑手册从OBS存储到Notebook调试的深度解析第一次接触华为云ModelArts看着控制台里琳琅满目的功能模块是不是有点无从下手很多开发者包括我自己刚开始的时候都卡在了OBS存储配置和Notebook调试这两个环节。明明照着文档操作却总是遇到“文件找不到”、“权限不足”或者训练作业莫名其妙失败的情况。这篇文章我想结合自己踩过的坑和实际项目经验为你梳理一条清晰的路径重点不是复述官方步骤而是告诉你那些文档里没写、但实践中一定会遇到的“暗礁”。ModelArts作为一个全流程的AI开发平台其核心设计理念是计算与存储分离。你的代码在Notebook或训练作业容器中运行而数据集、模型、日志等所有需要持久化的东西都放在对象存储服务OBS里。这个架构带来了弹性与成本优势但也引入了新的工作模式。理解OBS与计算环境之间如何安全、高效地“对话”是避开大多数坑的关键。接下来我会从存储配置的“第一公里”开始一直讲到Notebook里的高效调试技巧。1. OBS存储配置避开权限与路径的“经典陷阱”很多新手拿到账号创建完OBS桶就急着上传数据、跑代码结果第一步就栽了跟头。OBS的配置远不止创建一个桶那么简单它涉及到账号授权、路径规划、以及不同服务间的访问策略。1.1 访问密钥与跨服务授权你的“通行证”刚登录ModelArts系统会提示你进行访问授权。这一步的本质是让ModelArts服务获得操作你OBS资源的权限。很多人在“全局配置”里填完密钥就以为万事大吉但忽略了几个细节密钥的保管那个自动下载的credentials.csv文件包含了你的Access Key Id和Secret Access Key。这相当于你账户的长期密码务必妥善保管不要提交到代码仓库或分享给他人。最佳实践是在Notebook或训练脚本中通过环境变量或ModelArts提供的安全方式来引用而不是硬编码。授权范围ModelArts的授权通常是项目级别的。如果你在一个区域下有多个项目需要确认授权是在当前使用的项目下完成的。有时训练作业报“OBS路径不存在”或“权限拒绝”不是因为路径错了而是当前作业运行所在的项目根本没有被授权访问那个OBS桶。这里有一个简单的Python代码片段可以在Notebook中测试你的OBS访问是否正常比盲目跑训练作业更早发现问题import moxing as mox # 尝试列出你的OBS桶内容 try: file_list mox.file.list_directory(obs://your-bucket-name/) print(OBS连接成功桶内文件/目录示例) for item in file_list[:5]: # 只打印前5个 print(item) except Exception as e: print(fOBS连接失败错误信息{e}) print(请检查1. 桶名是否正确 2. 全局配置授权是否完成 3. 当前区域是否一致)1.2 桶与目录结构设计为效率而生OBS的目录结构直接影响后续训练作业的配置效率和数据管理成本。我看到过不少项目所有文件——代码、数据、输出模型——都堆在桶的根目录下混乱且低效。一个经过实战检验的推荐结构如下obs://your-project-bucket/ ├── code/ # 代码目录 │ ├── src/ # 模型核心代码model.py, loss.py等 │ ├── configs/ # 配置文件 │ ├── train.py # 训练启动脚本 │ └── requirements.txt # Python依赖列表 ├── datasets/ # 数据集目录 │ ├── raw/ # 原始数据 │ ├── processed/ # 预处理后的数据 │ └── dataset_manifest.json # 数据集清单文件可选 ├── outputs/ # 训练输出目录 │ ├── logs/ # 训练日志 │ ├── checkpoints/ # 模型检查点 │ └── tensorboard/ # TensorBoard事件文件 └── pretrained/ # 预训练模型存放目录为什么要这么设计隔离与清晰代码、数据、输出分离避免误操作。训练作业配置时“代码目录”、“数据来源”、“训练输出位置”可以清晰地指向不同子目录。避免冗余传输在创建训练作业时ModelArts会将你指定的“代码目录”和“数据来源”目录整个拷贝到训练容器中。如果你的outputs和code混在一起那么每次运行作业都会把历史训练结果也作为“代码”上传一次白白消耗时间和存储I/O。将outputs独立出来只在作业结束时回传效率高得多。便于版本管理可以为datasets下的不同版本数据建立子目录如v1.0/,v2.0/outputs下也可以按实验日期或参数命名文件夹回溯性极强。注意OBS路径在ModelArts中通常以obs://bucket-name/path/to/dir/格式使用。确保路径末尾的斜杠/使用一致特别是在指定目录时加上斜杠代表目录不加可能被识别为文件这常常是“File not found”错误的元凶。1.3 动态挂载OBSNotebook调试的“神器”传统上在Notebook中操作OBS文件需要调用moxing.file.copy接口进行上传下载对于需要频繁交互式浏览数据、修改代码的场景不够流畅。ModelArts的动态挂载OBS功能彻底改变了这一点。简单说它能把OBS上的一个目录“映射”到Notebook容器的本地文件系统如/data/your-obs-files/中。之后你就可以用普通的Python文件操作open(),os.listdir()、甚至命令行ls、cp来直接读写OBS里的内容就像操作本地磁盘一样。适用场景与选择对象存储桶适合读多写少的场景比如浏览数据集、读取配置文件。频繁的小文件写入可能导致性能下降。并行文件系统支持完整的POSIX语义读写性能都很好适合需要频繁保存中间结果或实时写入日志的交互式开发。在Notebook中执行挂载的代码示例import os import json from modelarts.session import Session from modelarts.config.auth import auth_by_apig session Session() project_id os.environ[PROJECT_ID] instance_id os.environ[INSTANCE_ID] request_url f/v1/{project_id}/notebooks/{instance_id}/storage # 1. 首先列出当前的挂载点 resp auth_by_apig(session, GET, request_url) print(当前挂载列表:, json.dumps(resp, indent2)) # 2. 动态挂载你的OBS数据集目录到Notebook的 /data/dataset 路径 mount_body { category: OBS, uri: obs://your-bucket-name/datasets/processed/, # 你的OBS路径 mount_path: /data/dataset # 容器内挂载点 } # 执行挂载 mount_resp auth_by_apig(session, POST, request_url, bodyjson.dumps(mount_body)) print(挂载结果:, mount_resp) # 挂载成功后你可以直接像操作本地文件夹一样操作OBS数据 import pandas as pd # 直接读取挂载目录下的CSV文件无需先下载 df pd.read_csv(/data/dataset/train_data.csv) print(df.head())这个功能极大地提升了在Notebook中进行数据探索和原型开发的体验是我现在最常用的功能之一。2. 训练作业创建参数配置中的“魔鬼细节”从Notebook的交互式环境到创建离线训练作业是模型开发的必经一步。这里面的表单选项每一个都可能成为作业失败的“开关”。2.1 算法来源与运行参数匹配你的代码框架在“创建训练作业”页面“算法来源”通常选择“常用框架”。关键在于后面的“AI引擎”和“版本”选择。这必须和你的代码环境严格匹配。PyTorch如果你的代码是PyTorch写的就选PyTorch。还要注意CUDA版本如PyTorch1.8 cuda-11.1是否与你本地训练环境一致避免因小版本差异导致奇怪的问题。MindSpore如果是昇腾Ascend芯片通常选择MindSpore。这里要特别注意MindSpore的版本。你的代码可能是基于MindSpore 1.8编写的如果选择了2.0的镜像由于API可能发生了重大变更极有可能无法运行。一个更稳妥的做法是在Notebook中使用预置镜像创建环境先在里面调试通代码然后将这个Notebook的环境保存为自定义镜像最后在创建训练作业时选择“自定义镜像”。这样能100%保证训练环境和调试环境的一致性。“运行参数”是另一个重灾区。这里传递的是你训练脚本如train.py里通过argparse定义的命令行参数。关键点data_url和train_url这两个参数系统会自动添加分别对应你在表单中填写的“数据来源”和“训练输出位置”的OBS路径。你不需要也不应该在运行参数里手动再写一遍否则会导致冲突。路径参数必须用OBS绝对路径如果你需要传递一个预训练模型的路径必须写成obs://bucket-name/pretrained/model.ckpt格式。如果你错误地写成了容器内预期的路径如/cache/pretrained/model.ckpt在作业初始化阶段脚本根本找不到这个文件因为文件还没从OBS传过来。布尔参数对于argparse中的actionstore_true参数在运行参数中只需填写参数名值为空即可。例如--use_augment。2.2 资源池与规格选择平衡成本与速度“资源池”选择“公共资源池”或“专属资源池”。“规格”则决定了你使用的计算资源类型CPU/GPU/Ascend和数量。对于调试阶段我的建议是从小规格开始。先用一个单卡例如GPU: 1*V100-PCIE-32GB跑一个epoch或者用一小部分数据目的是快速验证整个数据流、代码逻辑是否正确。通常作业会在“初始化”后的几分钟内暴露出路径错误、依赖缺失等根本性问题。用大规格资源排队等待半天结果因为一个简单的导入错误而失败非常不划算。当代码调试通过需要全量数据训练时再根据模型大小和数据量选择多卡规格。多卡训练涉及到分布式训练的代码修改如使用torch.nn.parallel.DistributedDataParallel这又是另一个话题了。2.3 日志分析与错误排查读懂“天书”作业提交后最紧张的时刻就是盯着日志看了。ModelArts的训练作业日志是分阶段的理解每个阶段的日志在说什么能帮你快速定位问题。初始化阶段这个阶段日志最多主要是环境准备、数据下载、代码拷贝。如果在这里失败最常见的问题是OBS路径错误[ERROR] Failed to download from obs://...。检查桶名、路径拼写、以及该路径下是否有文件。依赖安装失败pip install -r requirements.txt报错。可能是网络超时或者某个包的版本与当前Python环境不兼容。在Notebook中预先测试安装一遍是个好习惯。启动文件找不到[ERROR] Cannot find the start file: train.py。检查“代码目录”是否包含train.py或者train.py是否在子目录里却未在“启动文件”中指定正确相对路径。训练阶段代码开始执行。这里的错误千奇百怪但日志会打印出Python的Traceback。导入错误ModuleNotFoundError: No module named xxx。说明requirements.txt遗漏了某个包或者需要安装系统依赖。数据加载错误FileNotFoundError: [Errno 2] No such file or directory: /cache/data/...。这通常是脚本内数据路径处理有问题。在脚本中你需要将传入的data_urlOBS路径下的数据通过mox.file.copy_parallel拷贝到容器内的某个路径如/cache/data然后代码从这个容器内路径读取。很多人直接去读data_url这个字符串它是个OBS路径在容器内是无法直接打开的。内存溢出Killed或CUDA out of memory。尝试减小batch_size或者使用梯度累积。也可能是数据预处理阶段加载了全部数据到内存。提示养成在代码关键位置如数据拷贝完成后、模型初始化后、第一个batch训练前添加打印日志的习惯。例如print(fData loaded successfully, total samples: {len(dataset)})。这些自定义日志会在训练日志中清晰显示是定位进度和问题的最直观依据。3. Notebook高效调试超越Web界面的玩法很多人把ModelArts的Notebook当作一个在线的Jupyter Lab这有点大材小用了。结合一些高级功能它能成为媲美本地IDE的强大开发环境。3.1 远程开发用本地VS Code连接云端算力这是我最推荐的功能没有之一。你可以在本地用熟悉的VS Code编写代码享受其强大的智能提示、调试和版本管理功能而代码实际运行在ModelArts云端强大的GPU或Ascend实例上。配置步骤简述在ModelArts控制台创建Notebook实例时在“高级配置”中开启SSH远程开发功能。实例启动后在详情页获取SSH连接命令包含IP、端口、用户名。在本地VS Code安装Remote - SSH扩展。使用获取的命令通过VS Code连接到远程Notebook实例。连接成功后你就可以在VS Code里直接打开云端实例/home/ma-user/work目录下的文件进行编辑并使用云端的Python环境运行和调试。这样做的好处是你可以用本地的Git管理代码用VS Code的断点调试功能逐行排查问题同时享受云端的海量数据和强大算力。调试完成后代码就在OBS里直接提交训练作业无缝衔接。3.2 环境管理与镜像保存固化你的成功配置在Notebook里你可能会安装很多特定的Python包或者配置一些复杂的环境变量。默认情况下关闭Notebook实例后这些更改会丢失除非你保存在/home/ma-user/work目录下的代码文件。解决方案是使用“镜像保存”功能在Notebook中配置好所有环境pip install,conda install等。在Notebook实例详情页点击“停止”。停止后点击“更多” - “保存镜像”。为镜像命名然后开始保存。这个过程会将你的整个容器环境打包成一个自定义镜像。以后创建新的Notebook实例或训练作业时在“镜像”选择中就可以选择你保存的这个自定义镜像环境瞬间复现。这个功能对于团队协作和项目复现至关重要确保了环境的一致性。3.3 在Notebook中模拟训练作业环境为了最大程度保证Notebook调试和训练作业运行的一致性我习惯在Notebook中模拟作业的初始化过程。核心是模拟data_url和train_url这两个参数。# 在Notebook中模拟训练作业环境 import os import sys import moxing as mox # 1. 模拟从OBS下载代码和数据假设你的代码和数据已在OBS code_obs_path obs://your-bucket/code/ data_obs_path obs://your-bucket/datasets/processed/ local_code_path /home/ma-user/work/simulated_job/code local_data_path /home/ma-user/work/simulated_job/data local_output_path /home/ma-user/work/simulated_job/output os.makedirs(local_code_path, exist_okTrue) os.makedirs(local_data_path, exist_okTrue) os.makedirs(local_output_path, exist_okTrue) print(正在拷贝代码...) mox.file.copy_parallel(code_obs_path, local_code_path) print(正在拷贝数据...) mox.file.copy_parallel(data_obs_path, local_data_path) # 2. 切换到代码目录并添加至Python路径 sys.path.insert(0, local_code_path) os.chdir(local_code_path) # 3. 模拟训练作业传入的参数 sys.argv [ train.py, # 脚本名 f--data_url{local_data_path}, # 用本地路径模拟 f--train_url{local_output_path}, --batch_size32, --epochs1, --pretrained_ckptobs://your-bucket/pretrained/model.ckpt # 注意这里还是OBS路径脚本里需要处理下载 ] # 4. 执行训练脚本相当于 python train.py ... print(开始模拟训练作业执行...) # 这里需要根据你的脚本结构来调用如果是直接执行可以用 exec(open(train.py).read()) # 或者使用subprocess # import subprocess # result subprocess.run([sys.executable, train.py] sys.argv[1:], capture_outputTrue, textTrue) # print(result.stdout) # print(result.stderr)通过这种方式你可以在Notebook中几乎100%复现训练作业的运行环境提前发现路径处理、参数解析等问题。4. 实战案例一个图像分类项目的端到端流程让我们把这些知识点串起来看一个简单的图像分类项目如何在ModelArts上从零跑通。项目目标在华为云ModelArts上使用PyTorch训练一个ResNet模型对CIFAR-10数据集进行分类。步骤分解OBS准备创建桶obs://my-cifar10-project/。按照之前推荐的结构创建code/,datasets/,outputs/目录。将CIFAR-10数据集或任何你的数据集上传至obs://my-cifar10-project/datasets/cifar10/。将你的训练脚本train.py、模型定义model.py等上传至obs://my-cifar10-project/code/。Notebook调试创建一个PyTorch 1.8 CUDA 11.1的Notebook实例。开启SSH用本地VS Code连接。在Notebook中动态挂载数据集目录obs://my-cifar10-project/datasets/cifar10/到/data/cifar10。在VS Code中编写或修改train.py。关键点脚本必须能接受data_url和train_url参数并在内部使用moxing将数据从OBS拷贝到容器本地如/cache/data训练完成后将模型拷贝回train_url。在Notebook中运行修改后的脚本使用模拟参数的方法确保数据加载、模型前向传播、损失计算、反向传播整个流程无误。调试成功后将代码上传回OBS的code/目录。创建训练作业算法来源常用框架 - PyTorch-1.8-cuda-11.1。代码目录选择obs://my-cifar10-project/code/。启动文件train.py。数据来源选择obs://my-cifar10-project/datasets/cifar10/。训练输出位置选择obs://my-cifar10-project/outputs/exp001/。运行参数系统已自动添加data_url和train_url。你只需添加自己的参数如--batch_size 64 --learning_rate 0.01 --epochs 50。资源池公共资源池规格选择GPU: 1*V100-PCIE-32GB调试用。点击创建。监控与迭代在训练作业日志中观察初始化是否成功训练是否开始。第一个epoch顺利跑通后可以停止作业修改参数如换用多卡规格GPU: 8*V100-PCIE-32GB重新提交进行全量训练。训练完成后在OBS的outputs/exp001/目录下找到保存的模型文件。整个流程中OBS是唯一的数据交汇点Notebook是灵活的调试沙盒训练作业是规模化生产的车间。理解这三者的关系和各自的最佳实践就能在ModelArts上如鱼得水。