云服务器内容精选

  • 背景信息 Notebook使用涉及到计费,具体收费项如下: 处于“运行中”状态的Notebook,会消耗资源,产生费用。根据您选择的资源不同,收费标准不同,价格详情请参见产品价格详情。当您不需要使用Notebook时,建议停止Notebook,避免产生不必要的费用。 创建Notebook时,如果选择使用云硬盘EVS存储配置,实例不删除,云硬盘EVS会一直收费,建议及时停止并删除Notebook,避免产品不必要的费用。 在创建Notebook时,默认会开启自动停止功能,在指定时间内停止运行Notebook,避免资源浪费。 只有处于“运行中”状态的Notebook,才可以执行打开、停止操作。 一个账户最多创建10个Notebook。
  • Notebook选择存储说明 不同存储的实现方式都不同,在性能、易用性、成本的权衡中可以有不同的选择,没有一个存储可以覆盖所有场景,了解下云上开发环境中各种存储使用场景说明,更能提高使用效率。 表5 云上开发环境中各种存储使用场景说明 存储类型 建议使用场景 优点 缺点 云硬盘EVS 比较适合只在开发环境中做数据、算法探索,性能较好。 块存储SSD,可以理解为一个磁盘,整体IO性能比NFS要好,可以动态扩充,最大可以到4096GB。 云硬盘EVS作为持久化存储挂载在/home/ma-user/work目录下,该目录下的内容在实例停止后会被保留,存储支持在线按需扩容。 只能在单个开发环境中使用 。 并行文件系统PFS 说明: 并行文件系统PFS为白名单功能,如需使用,请联系华为技术支持开通。 仅支持挂载同一区域下的OBS并行文件系统(PFS)。 适合直接使用PFS桶作为持久化存储进行AI开发和探索,使用场景如下。 数据集的存储。将存储在PFS桶的数据集直接挂载到Notebook进行浏览和数据处理,在训练时直接使用。直接在创建Notebook的时候选择并行文件系统PFS。 或在实例运行后,将承载数据集的OBS并行文件系统动态挂载至Notebook中,详细操作请参考动态挂载OBS并行文件系统。 代码的存储。在Notebook调测完成,可以直接指定对应的对象存储路径作为启动训练的代码路径,方便临时修改。 训练观测。可以将训练日志等输出路径进行挂载,在Notebook中实时查看和观测,特别是利用TensorBoard可视化功能完成对训练输出的分析。 PFS是一种经过优化的高性能对象存储文件系统,存储成本低,吞吐量大,能够快速处理高性能计算(HPC)工作负载。在需要使用 对象存储服务 场景下,推荐使用PFS挂载。 说明: 建议上传时按照128MB或者64MB打包或者切分,使用时边下载边解压后在本地存储读取,以获取更好的读写与吞吐性能。 小文件频繁读写性能较差,例如直接作为存储用于模型重型训练,大文件解压等场景慎用。 说明: PFS挂载需要用户对当前桶授权给ModelArts完整读写权限,Notebook删除后,此权限策略不会被删除。 对象存储服务OBS 说明: OBS对象存储为白名单功能,如需使用,请联系华为技术支持开通。 仅支持挂载同一区域下的OBS对象存储。 在开发环境中做大规模的数据上传下载时,可以通过OBS桶做中转。 存储成本低,吞吐量大,但是小文件读写较弱。建议上传时按照128MB或者64MB打包或者切分,使用时边下载边解压后在本地读取。 对象存储语义,和Posix语义有区别,需要进一步理解。 弹性文件服务SFS 目前只支持在专属资源池中使用;针对探索、实验等非正式生产场景,建议使用这种。开发环境和训练环境可以同时挂载一块SFS存储,省去了每次训练作业下载数据的要求,一般来说重IO读写模型,超过32卡的大规模训练不适合。 实现为NFS,可以在多个开发环境、开发环境和训练之间共享,如果不需要重型分布式训练作业,特别是启动训练作业时,不需要额外再对数据进行下载,这种存储便利性可以作为首选。 性能比EVS云硬盘块存储低。 OceanStor Pacific存储(SFS容量型2.0) 目前只支持在天工资源池中使用。 适合直接使用SFS容量型2.0提供的文件系统作为训练作业所需的存储进行AI模型的训练和探索。同时提供OBS接口,支持从云外导入训练数据。 提供高性能文件客户端,满足重型训练作业中对存储高带宽诉求,同时提供OBS访问功能,同一份训练数据通过OBS接口导入到存储之后不需要再进相关转化,即可支持模型训练。 提供对象存储语义,和Posix语义有区别,需要进一步理解。 本地存储 重型训练作业首选 运行所在虚拟机或者裸金属机器上自带的SSD高性能存储,文件读写的吞吐量大,建议对于重型训练作业先将数据准备到对应目录再启动训练。 默认在容器/cache目录下进行挂载,/cache目录可用空间请参考开发环境中不同Notebook规格资源“/cache”目录的大小。 存储生命周期和容器生命周期绑定,每次训练都要下载数据。 在开发环境中如何使用云硬盘EVS块存储? 例如,在创建Notebook实例时选择云硬盘EVS存储小容量,Notebook运行过程中如果发现存储容量不够,可以扩容,请参考动态扩充云硬盘EVS容量。 在开发环境中如何使用OBS并行文件系统? 例如,在Notebook中训练时,可直接使用挂载至Notebook容器中的数据集,在运行过程中可以动态挂载OBS并行文件系统。
  • Notebook容器挂载目录介绍 创建Notebook实例,存储选择EVS时,Notebook会使用/home/ma-user/work目录作为用户的工作空间持久化存储。 存放在work目录的内容,在实例停止、重新启动后依然保留,其他目录下的内容不会保留,使用开发环境时建议将需要持久化的数据放在/home/ma-user/work目录。 更多Notebook实例的目录挂载情况(以下挂载点在保存镜像的时候不会保存)如表4所示。 表4 Notebook挂载目录介绍 挂载点 是否只读 备注 /home/ma-user/work/ 否 客户数据的持久化目录。 /data 否 客户PFS的挂载目录。 /cache 否 裸机规格时支持,用于挂载宿主机NVMe的硬盘。 /train-worker1-log 否 兼容训练作业调试过程。 /dev/shm 否 用于PyTorch引擎加速。
  • 打开Notebook实例 针对创建好的Notebook实例(即状态为“运行中”的实例),可以打开Notebook并在开发环境中启动编码。 pytorch、tensorflow、mindspore、tensorflow-mindspore、cylp-cbcpy、rlstudio-ray、mindquantum-mindspore镜像支持以下2种方式访问: 在线JupyterLab访问,具体参见通过JupyterLab在线使用Notebook实例进行AI开发。 本地IDE使用PyCharm工具,远程连接访问,具体参见通过PyCharm远程使用Notebook实例。 本地IDE使用VS Code工具,远程连接访问,具体参见通过VS Code远程使用Notebook实例。 本地IDE使用SSH工具,远程连接访问,具体参见通过SSH工具远程使用Notebook。 ModelArts提供的Notebook实例是以ma-user启动的,用户进入实例后,工作目录默认是/home/ma-user。
  • 创建开发环境并使用 镜像注册成功后,即可在ModelArts控制台的Notebook页面,创建开发环境时选择该 自定义镜像 。 图7 创建开发环境 打开开发环境,即可看到Dockerfile中创建的conda环境pytorch_1_8。 图8 打开开发环境 单击图中的pytorch_1_8,即可创建一个ipynb文件,导入torch,可以看到安装的pytorch 1.8已经能够使用。 图9 创建一个ipynb文件 再打开一个Terminal,查看ffmpeg和gcc的版本,是Dockerfile中安装的版本。 图10 查看ffmpeg和gcc的版本
  • 制作自定义镜像 这一节描述如何编写一个Dockerfile,并据此构建出一个新镜像在Notebook创建实例并使用。关于Dockerfile的具体编写方法,请参考官网。 查询基础镜像(第三方镜像可跳过此步骤) ModelArts提供的公共镜像,请参考Notebook专属预置镜像列表,根据预置镜像的引擎类型在对应的章节查看镜像URL。 连接 容器镜像服务 。 登录容器 镜像服务 控制台。选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。 图4 获取登录指令 此处生成的登录指令有效期为24小时,如果需要长期有效的登录指令,请参见获取长期有效登录指令。获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 登录指令末尾的 域名 为镜像仓库地址,请记录该地址,后面会使用到。 在安装容器引擎的机器中执行上一步复制的登录指令。登录成功会显示“Login Succeeded”。 拉取基础镜像或第三方镜像(此处以基础镜像举例,第三方镜像直接替换镜像地址)。 拉取ModelArts提供的公共镜像(请参考预置镜像)。 docker pull swr.cn-north-4.myhuaweicloud.com/atelier/notebook2.0-pytorch-1.4-kernel-cp37:3.3.3-release-v1-20220114 编写Dockerfile。 vim一个Dockerfile,如果使用的基础镜像是ModelArts提供的公共镜像,Dockerfile的具体内容可参考Dockerfile文件(基础镜像为ModelArts提供)。 如果使用的基础镜像是第三方镜像(非ModelArts提供的公共镜像),Dockerfile文件中需要添加uid为1000的用户ma-user和gid为100的用户组ma-group,具体可参考Dockerfile文件(基础镜像为非ModelArts提供)。 本例的Dockerfile将基于PyTorch基础镜像安装pytorch 1.8, ffmpeg 3和gcc 8,构建一个面向AI任务的镜像。 构建镜像 使用docker build命令从Dockerfile构建出一个新镜像。命令参数解释如下: “-t” 指定了新的镜像地址,包括{局点信息}/{组织名称}/{镜像名称}:{版本名称},请根据实际填写。建议使用完整的swr地址,因为后续的调试和注册需要使用。 “-f ”指定了Dockerfile的文件名,根据实际填写。 最后的“ . ”指定了构建的上下文是当前目录,根据实际填写。 docker build -t swr.cn-north-4.myhuaweicloud.com/sdk-test/pytorch_1_8:v1 -f Dockerfile . 图5 构建成功
  • 使用场景和构建流程说明 用户可以使用ModelArts提供的基础镜像或第三方的镜像来编写Dockerfile,在E CS 服务器上构建出完全适合自己的镜像。然后将镜像进行注册,用以创建新的开发环境,满足自己的业务需求。 本案例将基于ModelArts提供的PyTorch基础镜像,安装pytorch 1.8、ffmpeg 3和gcc 8,构建一个面向AI开发的新环境。 主要流程如下图所示: 图1 构建与调测镜像流程 本案例适用于华为云-北京四Region。
  • Notebook自定义镜像规范 制作自定义镜像时,Base镜像需满足如下规范: 基于昇腾、Dockerhub官网等官方开源的镜像制作,开源镜像需要满足如下操作系统约束: x86:Ubuntu18.04、Ubuntu20.04 ARM:Euler2.8.3、Euler2.10.7 Ubuntu20.04.6可能有兼容性问题,请优先使用低于该版本的操作系统。 不满足以上镜像规范,所制作的镜像使用可能会出现故障,请用户检查镜像规范,并参考Notebook自定义镜像故障基础排查自行排查,如未解决请联系华为技术工程师协助解决。
  • 准备Docker机器并配置环境信息 准备一台具有Docker功能的机器,如果没有,建议申请一台弹性云服务器并购买弹性公网IP,并在准备好的机器上安装必要的软件。 ModelArts提供了ubuntu系统的脚本,方便安装docker。 本地Linux机器的操作等同ECS服务器上的操作,请参考本案例。 登录ECS控制台,购买弹性云服务器,镜像选择“公共镜像”,推荐使用ubuntu18.04的镜像;系统盘设置为100GiB。具体操作请参考购买并登录弹性云服务器。 图2 选择镜像和磁盘 购买弹性公网IP并绑定到弹性云服务器。具体操作请参考配置网络。 配置VM环境。 在docker机器中,使用如下命令下载安装脚本。 wget https://cnnorth4-modelarts-sdk.obs.cn-north-4.myhuaweicloud.com/modelarts/custom-image-build/install_on_ubuntu1804.sh 当前仅支持ubuntu系统的脚本。 在docker机器中并执行如下命令,即可完成环境配置。 bash install_on_ubuntu1804.sh 图3 配置成功 source /etc/profile 安装脚本依次执行了如下任务: 安装docker。 如果挂载了GPU,则会安装nvidia-docker2,用以将GPU挂载到docker容器中。
  • OBS存储类型的Notebook 在创建Notebook时,如果“存储配置”选择的是“OBS”。Notebook列表的所有文件读写操作是基于所选择的OBS路径下的内容操作,即Notebook中的数据和OBS中的数据是同步的。在OBS路径中创建文件夹、上传数据,会同步到Notebook中,Notebook中的操作也会同步到OBS中,如图2所示。 图2 通过OBS同步数据 “Upload”上传数据大小受限时,您可以通过以下多种方式将文件上传到OBS中,通过OBS与Notebook进行数据同步。 表1 上传数据方法 上传方法 说明 “数据”页面上传 通过“数据”页面上传数据,支持上传最大为1GB的单个文件。 使用命令行工具上传 命令行工具(eihealth-toolkit)配套 EIHealth 平台,提供数据、应用、流程和作业资源的管理和使用,支持上传最大为48.8TB的单个文件。
  • 从JupyterLab中下载大于100MB的文件到本地 大于100MB的文件需要先从Notebook中上传到OBS,再从OBS下载到本地,具体操作如下: 打开Python运行环境。 以下图为例,在Launcher页面的Notebook区域,单击“python-3.7.10”。请您以实际环境为准。 图2 打开Python运行环境 使用MoXing将目标文件从Notebook上传到OBS中。 上传txt、压缩后文件夹的Python示例代码如下。代码中的“/home/ma-user/work/xxx”为文件在Notebook中的存储路径,“obs://bucket_name/xxx”为该文件上传到OBS的存储路径,请您按照实际路径进行修改。 上传一个obs_file.txt文件,从Notebook上传至OBS。 在命令行输入以下代码,按需修改路径后,单击运行代码。在OBS控制台的桶中,可以看到txt对象存在,表明上传成功。 1 2 import moxing as mox mox.file.copy('/home/ma-user/work/obs_file.txt', 'obs://bucket_name/obs_file.txt') 图3 运行代码示例 上传一个压缩后的sub_dir_0文件夹,从Notebook上传至OBS。 在命令行输入以下代码,按需修改路径后,单击运行代码。在OBS控制台的桶中,可以看到文件夹对象存在,表明上传成功。 import moxing as mox mox.file.copy_parallel('/home/ma-user/work/sub_dir_0', 'obs://bucket_name/sub_dir_0') 使用OBS或ModelArts SDK将OBS中的文件下载到本地。 方式一:使用OBS进行下载 在OBS中,可以将样例中的“obs_file.txt”下载到本地。如果您的数据较多,推荐OBS Browser+下载数据或文件夹。使用OBS下载文件的操作指导,请参见下载文件。 方式二:使用ModelArts SDK进行下载 在您的本地环境下载并安装ModelArts SDK。 完成ModelArts SDK的Session鉴权。 将OBS中的文件下载到本地,详情请参见从OBS下载数据。示例代码如下: 1 2 3 4 5 6 7 8 9 10 from modelarts.session import Session # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 __AK = os.environ["HUAWEICLOUD_SDK_AK"] __SK = os.environ["HUAWEICLOUD_SDK_SK"] # 如果进行了加密还需要进行解密操作 session = Session(access_key=__AK,secret_key=__SK, project_id='***', region_name='***') session.download_data(bucket_path="/bucket_name/obs_file.txt",path="/home/user/obs_file.txt")
  • 编写文件 新建文件后,自动进入文件编写页面,您也可以单击文件名称进入。 图3 编写文件 表1 编写文件页面介绍 区域 区域名称 详细说明 1 文件名称 您可以在此区域填写自定义的文件名称,修改保存后,对应的File列表也将发生变化。 2 菜单栏 菜单栏中有File、Edit、View、Insert、Cell、Kernel、Help等丰富功能。详细说明建议参考Jupyter Notebook使用文档,下方工具栏提供了常用的功能,能够满足常见的Python运行文件编写。 3 工具栏 工具栏罗列了支持的常用快捷操作,从左到右分别为:保存文件、添加新Cell、剪切选中的Cell、复制选中的Cell、粘贴选中的Cell、将选中Cell上移、将选中Cell下移、运行选中的Cell、终止kernel、重启kernel、重启kernel并重新运行所有Cell。 Code下拉框中有四个选项: Code:写Python代码 MarkDown:写MarkDown代码,通常用于注释 Raw NBConvert:转换工具 Heading:快捷添加MarkDown标题 4 代码Cell 代码单元格。每一个Cell有两种模式:命令模式和编辑模式。 最左侧为蓝色条时,是命令模式,绿色条表示编辑模式(此时Cell中有光标,可以进行代码编写)。在命令模式下,按下“Enter”键或者鼠标单击代码框可以进入编辑模式。在编辑模式下,按下“ESC”键或者鼠标单击代码框左侧区域即可进入命令模式。
  • 子账号启动其他用户的SSH实例 子账号可以看到所有用户的Notebook实例后,如果要通过SSH方式远程连接其他用户的Notebook实例,需要将SSH密钥对更新成自己的,否则会报错ModelArts.6786。更新密钥对具体操作请参见修改Notebook SSH远程连接配置。具体的错误信息提示:ModelArts.6789: 在ECS密钥对管理中找不到指定的ssh密钥对xxx,请更新密钥对并重试。
  • 前提条件 本地已安装2019.2及以上版本的PyCharm专业版。SSH远程调试功能只限PyCharm专业版。 创建一个Notebook实例,并开启远程SSH开发。该实例状态必须处于“运行中”,具体参见创建Notebook实例章节。 在Notebook实例详情页面获取开发环境IP地址(例如:dev-modelarts-cnnorth4.huaweicloud.com)和端口号。 图1 Notebook实例详情页面 准备好密钥对。 密钥对在用户第一次创建时,自动下载,之后使用相同的密钥时不会再有下载界面(用户一定要保存好),或者每次都使用新的密钥对。
  • Step5 在开发环境中调试代码 由于已经连接至云端开发环境,此时可以方便的在本地PyCharm中编码、调测并运行。实际运行环境为云上开发环境,资源为云上昇腾AI处理器资源。可以做到本地编写修改代码,直接在云上环境运行。 像本地运行代码一样,直接单击运行按钮运行代码即可,此时虽然是在本地IDE单击的运行按钮,实际上运行的是云端开发环境里的代码,日志可以回显在本地的日志窗口。 图5 调试代码 也可以单击右上角的Run/Debug Configuration来设置运行的参数。 图6 设置运行参数 当需要调试代码时,可以直接打断点,然后使用debug方式运行程序。 图7 代码打断点 图8 Debug方式调试 此时可以进入debug模式,代码运行暂停在该行,且可以查看变量的值。 图9 Debug模式 使用debug方式调试代码的前提是本地的代码和云端的代码是完全一致的,如果不一致可能会导致在本地打断点的行和实际运行时该行的代码并不一样,会出现意想不到的错误。 因此在配置云上Python Interpreter时,推荐选择Automatically upload选项,以保证本地的文件修改能自动上传到云端。如果没有选择自动上传,则本地代码修改完后,也可以参考Step6 同步上传本地文件至Notebook手动上传目录或代码。