华为云用户手册

  • 使用场景 ModelArts提供灵活开放的开发环境,您可以根据实际情况选择。 ModelArts提供了云化版本的Notebook,无需关注安装配置,即开即用,具体参见JupyterLab简介及常用操作。 ModelArts也提供了本地IDE的方式开发模型,通过开启SSH连接,用户本地IDE可以远程连接到ModelArts的Notebook开发环境中,调试和运行代码。本地IDE方式不影响用户的编码习惯,并且可以方便快捷的使用云上的Notebook开发环境。 本地IDE当前支持VS Code、PyCharm、SSH工具。PyCharm和VS Code还分别有专门的插件PyCharm Toolkit、VS Code Toolkit,让远程连接操作更便捷。具体参见VS Code一键连接Notebook。 ModelArts还提供了可视化编排工具ML Studio,用户可以通过拖拉拽的方式开发基于ML Studio引擎的模型,具体参见ML Studio简介。
  • 打开Notebook实例 针对创建好的Notebook实例(即状态为“运行中”的实例),可以打开Notebook并在开发环境中启动编码。 基于不同AI引擎创建的Notebook实例,打开方式不一样。 pytorch、tensorflow、mindspore、tensorflow-mindspore、cylp-cbcpy、rlstudio-ray、mindquantum-mindspore镜像支持以下2种方式访问: 本地IDE使用PyCharm/VS Code/SSH工具,远程连接访问,具体参见VS Code一键连接Notebook。 在线JupyterLab访问,具体参见JupyterLab简介及常用操作。 mlstudio-pyspark镜像仅支持在线JupyterLab访问,具体参见JupyterLab简介及常用操作 mindstudio镜像仅支持在本地使用MobaXterm通过SSH远程访问,具体参见使用MindStudio开发Ascend算子。 modelbox镜像仅支持在本地使用VS Code插件远程访问,具体参见配置本地VSCode连接云上开发环境Modelbox镜像。 创建实例,持久化存储挂载路径为/home/ma-user/work目录。 存放在work目录的内容,在实例停止、重新启动后依然保留,其他目录下的内容不会保留,使用开发环境时建议将需要持久化的数据放在/home/ma-user/work目录。 父主题: 管理Notebook实例
  • API对应关系 Python:指本地使用Python对本地文件的操作接口。支持一键切换为对应的MoXing文件操作接口(mox.file)。 mox.file:指MoXing框架中用于文件操作的接口,其与python接口一一对应关系。 tf.gfile:指MoXing文件操作接口一一对应的TensorFlow相同功能的接口,在MoXing中,无法自动将文件操作接口自动切换为TensorFlow的接口,下表呈现内容仅表示功能类似,帮助您更快速地了解MoXing文件操作接口的功能。 表1 API对应关系 Python(本地文件操作接口) mox.file(MoXing文件操作接口) tf.gfile(TensorFlow文件操作接口) glob.glob mox.file.glob tf.gfile.Glob os.listdir mox.file.list_directory(..., recursive=False) tf.gfile.ListDirectory os.makedirs mox.file.make_dirs tf.gfile.MakeDirs os.mkdir mox.file.mk_dir tf.gfile.MkDir os.path.exists mox.file.exists tf.gfile.Exists os.path.getsize mox.file.get_size - os.path.isdir mox.file.is_directory tf.gfile.IsDirectory os.remove mox.file.remove(..., recursive=False) tf.gfile.Remove os.rename mox.file.rename tf.gfile.Rename os.scandir mox.file.scan_dir - os.stat mox.file.stat tf.gfile.Stat os.walk mox.file.walk tf.gfile.Walk open mox.file.File tf.gfile.FastGFile(tf.gfile.Gfile) shutil.copyfile mox.file.copy tf.gfile.Copy shutil.copytree mox.file.copy_parallel - shutil.rmtree mox.file.remove(..., recursive=True) tf.gfile.DeleteRecursively
  • 一键切换 一键切换的API实现方式为对基础API进行函数替换,在多进程或者多线程环境中一键切换的API可能会带来一些未知问题,因此建议直接调用moxing API即可实现功能的代码尽量不要用这个一键切换功能。 一键切换的API全局只能执行一次,不要在训练脚本中多次调用,避免导致训练失败。 您可以通过一行代码,将表1中OS的API映射到mox.file下。将以下代码写到启动脚本的最前面,在之后的Python运行中,当调用表格第一列的OS相关的API时,会自动映射到第二列mox.file的API。 1 2 import moxing as mox mox.file.shift('os', 'mox') 在做完shift之后,可以直接通过os.listdir或者open方法操作OBS目录或文件,样例代码如下所示。 1 2 3 4 5 6 7 8 import os import moxing as mox mox.file.shift('os', 'mox') print(os.listdir('obs://bucket_name')) with open('obs://bucket_name/hello_world.txt') as f: print(f.read())
  • 移动和复制操作 移动一个OBS文件或文件夹。移动操作本身是用“复制+删除”来实现的。 一个OBS文件移动到另一个OBS文件,例如将“obs://bucket_name/obs_file.txt”移动到“obs://bucket_name/obs_file_2.txt”。 1 2 import moxing as mox mox.file.rename('obs://bucket_name/obs_file.txt', 'obs://bucket_name/obs_file_2.txt') 移动和复制操作不可以跨桶,必须在同一个桶内操作。 从OBS移动到本地,例如将“obs://bucket_name/obs_file.txt”移动到“/tmp/obs_file.txt”。 1 2 import moxing as mox mox.file.rename('obs://bucket_name/obs_file.txt', '/tmp/obs_file.txt') 从本地移动到OBS,例如将“/tmp/obs_file.txt”移动到“obs://bucket_name/obs_file.txt”。 1 2 import moxing as mox mox.file.rename('/tmp/obs_file.txt', 'obs://bucket_name/obs_file.txt') 从本地移动到本地,例如将“/tmp/obs_file.txt”移动到“/tmp/obs_file_2.txt”,该操作相当于os.rename。 1 2 import moxing as mox mox.file.rename('/tmp/obs_file.txt', '/tmp/obs_file_2.txt') 所有的移动操作均可以操作文件夹,如果操作的是文件夹,那么则会递归移动文件夹下所有的内容。 复制一个文件。mox.file.copy仅支持对文件操作,如果要对文件夹进行操作,请使用mox.file.copy_parallel。 从OBS复制到OBS,例如将“obs://bucket_name/obs_file.txt”复制到“obs://bucket_name/obs_file_2.txt”。 1 2 import moxing as mox mox.file.copy('obs://bucket_name/obs_file.txt', 'obs://bucket_name/obs_file_2.txt') 将OBS文件复制到本地,也就是下载一个OBS文件。例如下载“obs://bucket_name/obs_file.txt”到本地“/tmp/obs_file.txt”。 1 2 import moxing as mox mox.file.copy('obs://bucket_name/obs_file.txt', '/tmp/obs_file.txt') 将本地文件复制到OBS,也就是上传一个OBS文件,例如上传“/tmp/obs_file.txt”到“obs://bucket_name/obs_file.txt”。 1 2 import moxing as mox mox.file.copy('/tmp/obs_file.txt', 'obs://bucket_name/obs_file.txt') 将本地文件复制到本地,操作等价于shutil.copyfile,例如将“/tmp/obs_file.txt”复制到“/tmp/obs_file_2.txt”。 1 2 import moxing as mox mox.file.copy('/tmp/obs_file.txt', '/tmp/obs_file_2.txt') 复制一个文件夹。mox.file.copy_parallel仅支持对文件夹操作,如果要对文件进行操作,请使用mox.file.copy。 从OBS复制到OBS,例如将obs://bucket_name/sub_dir_0复制到obs://bucket_name/sub_dir_1 1 2 import moxing as mox mox.file.copy_parallel('obs://bucket_name/sub_dir_0', 'obs://bucket_name/sub_dir_1') 将OBS文件夹复制到本地,也就是下载一个OBS文件夹。例如下载“obs://bucket_name/sub_dir_0”到本地“/tmp/sub_dir_0”。 1 2 import moxing as mox mox.file.copy_parallel('obs://bucket_name/sub_dir_0', '/tmp/sub_dir_0') 将本地文件夹复制到OBS,也就是上传一个OBS文件夹,例如上传“/tmp/sub_dir_0”到“obs://bucket_name/sub_dir_0”。 1 2 import moxing as mox mox.file.copy_parallel('/tmp/sub_dir_0', 'obs://bucket_name/sub_dir_0') 将本地文件夹复制到本地,操作等价于shutil.copytree,例如将“/tmp/sub_dir_0”复制到“/tmp/sub_dir_1”。 1 2 import moxing as mox mox.file.copy_parallel('/tmp/sub_dir_0', '/tmp/sub_dir_1')
  • 列举操作 列举一个OBS目录,只返回顶层结果(相对路径),不做递归列举。 例如列举“obs://bucket_name/object_dir”,返回该目录下所有的文件和文件夹,不会递归查询。 假设“obs://bucket_name/object_dir”中有如下结构 1 2 3 4 5 bucket_name |- object_dir |- dir0 |- file00 |- file1 调用如下代码: 1 2 import moxing as mox mox.file.list_directory('obs://bucket_name/object_dir') 返回一个list: ['dir0', 'file1'] 递归列举一个OBS目录,返回目录中所有的文件和文件夹(相对路径),并且会做递归查询。 假设obs://bucket_name/object_dir中有如下结构。 1 2 3 4 5 bucket_name |- object_dir |- dir0 |- file00 |- file1 调用如下代码: 1 2 import moxing as mox mox.file.list_directory('obs://bucket_name/object_dir', recursive=True) 返回一个list: ['dir0', 'dir0/file00', 'file1']
  • 查询操作 判断一个OBS文件是否存在,如果存在则返回True,如果不存在则返回False。 1 2 import moxing as mox mox.file.exists('obs://bucket_name/sub_dir_0/file.txt') 判断一个OBS文件夹是否存在,如果存在则返回True,如果不存在则返回False。 1 2 import moxing as mox mox.file.exists('obs://bucket_name/sub_dir_0/sub_dir_1') 由于OBS允许同名的文件和文件夹(Unix操作系统不允许),如果存在同名的文件和文件夹,例如“obs://bucket_name/sub_dir_0/abc”,当调用mox.file.exists时,不论abc是文件还是文件夹,都会返回True。 判断一个OBS路径是否为文件夹,如果是则返回True,否则返回False。 1 2 import moxing as mox mox.file.is_directory('obs://bucket_name/sub_dir_0/sub_dir_1') 由于OBS允许同名的文件和文件夹(Unix操作系统不允许),如果存在同名的文件和文件夹,例如obs://bucket_name/sub_dir_0/abc,当调用mox.file.is_directory时,会返回True。 获取一个OBS文件的大小,单位为bytes。 例如获取“obs://bucket_name/obs_file.txt”的文件大小。 1 2 import moxing as mox mox.file.get_size('obs://bucket_name/obs_file.txt') 递归获取一个OBS文件夹下所有文件的大小,单位为bytes。 例如获取“obs://bucket_name/object_dir”目录下所有文件大小的总和。 1 2 import moxing as mox mox.file.get_size('obs://bucket_name/object_dir', recursive=True) 获取一个OBS文件或文件夹的stat信息,stat信息中包含如下信息。 length:文件大小。 mtime_nsec:创建时间戳。 is_directory:是否为目录。 例如查询一个OBS文件“obs://bucket_name/obs_file.txt”,此文件地址也可以替换成一个文件夹地址。 1 2 3 4 5 import moxing as mox stat = mox.file.stat('obs://bucket_name/obs_file.txt') print(stat.length) print(stat.mtime_nsec) print(stat.is_directory)
  • 删除操作 删除一个OBS文件。 例如删除“obs://bucket_name/obs_file.txt”。 1 2 import moxing as mox mox.file.remove('obs://bucket_name/obs_file.txt') 删除一个OBS目录,并且递归的删除这个目录下的所有内容。如果这个目录不存在,则会报错。 例如删除“obs://bucket_name/sub_dir_0”下的所有内容。 1 2 import moxing as mox mox.file.remove('obs://bucket_name/sub_dir_0', recursive=True)
  • 读写操作 读取一个OBS文件。 例如读取“obs://bucket_name/obs_file.txt”文件内容,返回string(字符串类型)。 1 2 import moxing as mox file_str = mox.file.read('obs://bucket_name/obs_file.txt') 也可以使用打开文件对象并读取的方式来实现,两者是等价的。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/obs_file.txt', 'r') as f: file_str = f.read() 从文件中读取一行,返回string,以换行符结尾。同样可以打开OBS的文件对象。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/obs_file.txt', 'r') as f: file_line = f.readline() 从文件中读取所有行,返回一个list,每个元素是一行,以换行符结尾。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/obs_file.txt', 'r') as f: file_line_list = f.readlines() 以二进制模式读取一个OBS文件。 例如读取“obs://bucket_name/obs_file.bin”文件内容,返回bytes(字节类型)。 1 2 import moxing as mox file_bytes = mox.file.read('obs://bucket_name/obs_file.bin', binary=True) 也可以使用打开文件对象并读取的方式来实现,两者是等价的。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/obs_file.bin', 'rb') as f: file_bytes = f.read() 以二进制模式打开的文件也支持读取一行或者读取所有行,用法不变。 将字符串写入一个文件。 例如将字符串“Hello World!”写入OBS文件“obs://bucket_name/obs_file.txt”中。 1 2 import moxing as mox mox.file.write('obs://bucket_name/obs_file.txt', 'Hello World!') 也可以使用打开文件对象并写入的方式来实现,两者是等价的。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/obs_file.txt', 'w') as f: f.write('Hello World!') 用写入模式打开文件或者调用mox.file.write时,如果被写入文件不存在,则会创建,如果已经存在,则会覆盖。 追加一个OBS文件。 例如将字符串“Hello World!”追加到“obs://bucket_name/obs_file.txt”文件中。 1 2 import moxing as mox mox.file.append('obs://bucket_name/obs_file.txt', 'Hello World!') 也可以使用打开文件对象并追加的方式来实现,两者是等价的。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/obs_file.txt', 'a') as f: f.write('Hello World!') 用追加模式打开文件或者调用mox.file.append时,如果被写入文件不存在,则会创建,如果已经存在,则直接追加。 当被追加的源文件比较大时,例如“obs://bucket_name/obs_file.txt”文件大小超过5MB时,追加一个OBS文件的性能比较低。 如果以写入模式或追加模式打开文件,当调用write方法时,待写入内容只是暂时的被存在的缓冲区,直到关闭文件对象(退出with语句时会自动关闭文件对象)或者主动调用文件对象的close()方法或flush()方法时,文件内容才会被写入。
  • 为什么要用mox.file 使用Python打开一个本地文件,如下所示: 1 2 with open('/tmp/a.txt', 'r') as f: print(f.read()) OBS目录以“obs://”开头,比如“obs://bucket/XXX.txt”。用户无法直接使用open方法打开OBS文件,上面描述的打开本地文件的代码将会报错。 OBS提供了很多方式和工具给用户使用,如SDK、API、console、OBS Browser等,ModelArts mox.file提供了一套更为方便的访问OBS的API,允许用户通过一系列模仿操作本地文件系统的API来操作OBS文件。例如,可以使用以下代码来打开一个OBS上的文件。 1 2 3 import moxing as mox with mox.file.File('obs://bucket_name/a.txt', 'r') as f: print(f.read()) 例如,列举一个本地路径会使用如下Python代码。 1 2 import os os.listdir('/tmp/my_dir/') 如果要列举一个OBS路径,mox.file则需要如下代码: 1 2 import moxing as mox mox.file.list_directory('obs://bucket_name/my_dir/')
  • 调用mox.file 输入如下代码,实现如下几个简单的功能。 引入MoXing Framework。 在已有的“modelarts-test08/moxing”目录下,创建一个“test01”文件夹。 调用代码检查“test01”文件夹是否存在,如果存在,表示上一个操作已成功。 1 2 3 4 import moxing as mox mox.file.make_dirs('obs://modelarts-test08/moxing/test01') mox.file.exists('obs://modelarts-test08/moxing/test01') 执行结果如图3所示。注意,每输入一行代码,单击下“Run”运行。您也可以进入OBS管理控制台,检查“modelarts-test08/moxing”目录,查看“test01”文件夹是否已创建成功。更多MoXing的常用操作请参见常用操作的样例代码。 图3 运行示例
  • 引入MoXing Framework的相关说明 在引入MoXing模块后,Python的标准logging模块会被设置为INFO级别,并打印版本号信息。可以通过以下API重新设置logging的等级。 1 2 3 4 import logging from moxing.framework.util import runtime runtime.reset_logger(level=logging.WARNING) 可以在引入moxing之前,配置环境变量MOX_SILENT_MODE=1,来防止MoXing打印版本号。使用如下Python代码来配置环境变量,需要在import moxing之前就将环境变量配置好。 1 2 3 import os os.environ['MOX_SILENT_MODE'] = '1' import moxing as mox
  • 修订记录 发布日期 修改记录 2024-03-28 第六次正式发布。 新增常见问题:如何释放E CS VPC终端节点 资源?。 优化资料描述。 2023-12-11 第五次正式发布。 新增常见问题:为什么Global级项目有region级的选择框显示?。 优化资料描述。 2023-08-10 第四次正式发布。 新增 安全云脑 中的日志存储时间是多久?章节内容。 更新安全云脑与 态势感知 服务的关系与区别?章节内容。 更新购买安全云脑时提示权限不足怎么办?章节内容。 更新安全云脑支持跨账号使用吗?章节内容。 计费说明内容合入计费说明手册。 2023-05-25 第三次正式发布。 新增如何给 IAM 子账号授权?章节内容。 新增安全云脑与态势感知服务的关系与区别?章节内容。 新增购买安全云脑时提示权限不足怎么办?章节内容。 2023-04-25 第二次正式发布。 更新SecMaster与HSS服务的区别?章节内容。 更新安全云脑如何变更版本规格?章节内容。 2022-12-10 第一次正式发布。
  • 云端录制费用 表6 云端录制计费价格 产品规格 单价(元/分钟) FHD(超清) 0.048 HD(高清) 0.013 SD(标清) 0.0065 Audio(音频) 0.0035 计费公式 云端录制费用 = 录制规格单价 × 录制时长用量 计费规则 录制时长分为音频时长和视频时长。 视频时长会根据用户录制视频分辨率划分视频档位,然后分别对不同档位的录制时长进行计费。若使用自定义分辨率,则按宽高乘积计费。 表7 视频分辨率 视频档位 视频分辨率 FHD(超清) 1280*720 - 1920*1080(含) HD(高清) 640*480 - 1280*720(含) SD(标清) 不高于640*480(含) 语音时长是指录制中只有纯音频的时间。同一个录制文件同一时间内,既有视频又有音频时,只按视频时长统计,不会重复计算语音时长。 默认情况下,房间内每个用户的音视频流将分别录制成独立的文件,如需将单个房间内多个用户的视频画面录制在一个文件内,可以通过云端混流转码将视频画面混合。使用云端混流转码功能将产生额外的转码费用,详情请参见云端合流转码费用。 计费示例 场景一(单流录制):用户A、B、C在同一房间持续通话30分钟,将A、B、C三个用户的整个通话过程分别录制成独立的文件,3人共生成3个文件,则本次产生的单流录制费用为:(0.013元/分钟 + 0.0065元/分钟 + 0.007元/分钟)*30分钟 = 0.795(元) 用户 分辨率和时长 费用(元) A 1280 × 720(高清) 30分钟 0.013*30 B 640 × 480(标清) 30分钟 0.0065*30 C 音频 30分钟 0.007*30 场景二(合流录制):用户A、B、C 在同一房间持续通话30分钟,将A、B、C三个用户的整个通话过程合流转码后录制成1个文件,合流转码后输出的视频分辨率始终为1280 × 720(高清),则本次产生的合流录制费用为:0.013元/分钟*30分钟 = 0.39(元) 用户 分辨率和时长 费用(元) A、B、C 1280 × 720(高清) 30分钟 0.013*30 使用云端合流转码功能将产生额外的合流转码费用,具体请参见云端合流转码费用。
  • 云端合流转码费用 表8 合流转码计费价格 产品规格 单价(元/分钟) FHD(超清) H264 0.068 HD(高清) H264 0.032 SD(标清) H264 0.016 FHD(超清) H265 0.17 HD(高清) H265 0.08 SD(标清) H265 0.04 Audio(音频) 0.006 计费公式 合流转码费用 = 合流转码规格单价 × 合流转码时长用量 计费规则 转码时长分为音频时长和视频时长。 视频时长会根据用户转码视频分辨率划分视频档位,然后分别对不同档位的转码时长进行计费。 表9 视频分辨率 视频档位 视频分辨率 FHD(超清) 1280*720 - 1920*1080(含) HD(高清) 640*480 - 1280*720(含) SD(标清) 不高于640*480(含) 语音时长是指转码只有纯音频的时间。转码后输出的同一条流在同一时间内,既有视频又有音频时,只按视频时长统计,不会重复计算语音时长。 计费示例:使用H.264编码方式将A、B、C用户流合流转码输出1280 × 720分辨率的视频30分钟,则本次合流转码产生的费用为:0.032(元/分钟)*30(分钟) = 0.96(元) 用户 分辨率和时长 费用(元) A、B、C 1280 × 720(高清) 30分钟 0.032*30
  • 到期与欠费 欠费:按需付费是根据每个计费项在对应的计费周期进行扣费的,若余额不足,则无法对上一个计费周期进行扣费,从而导致华为云 实时音视频 服务欠费。欠费后会进入资源保留期,您在实时音视频服务中配置的数据会予以保留,但无法访问及使用实时音视频服务相关功能。保留期满仍未缴清欠款,存储在实时音视频服务中的数据将被删除且无法恢复。关于保留期时长等更多详细介绍请参见宽限期保留期。为防止相关资源被停止或释放,请您及时为账户进行充值,具体请参见欠费还款。 服务到期:按需付费没有到期概念。
  • 计费项 华为云实时音视频服务的计费项分为基础服务费用和增值服务费用两类。 基础服务费用:包含语音通话和视频通话费用。 增值服务费用:包含云端录制和云端合流转码费用,增值服务是基于基础服务之上额外提供的增值功能,无法脱离基础服务单独使用,使用增值服务需支付额外的增值费用。 具体说明如表2所示,各计费项的价格详情请参见产品价格详情。 您可以通过华为云实时音视频服务提供的价格计算器,选择您需要的产品规格快速计算出购买实时音视频时长的参考价格。 表2 计费项说明 分类 计费项 场景说明 计费说明 付费方式 基础服务 语音通话 两人或多人语音通话,如语聊房、语音互动直播、语音会议等场景。 按房间内每个用户加入房间后产生的纯音频通话总时长进行计费。 具体请参见语音通话费用。 按需付费 视频通话 两人或多人视频通话,如连麦视频互动场景、视频会议、互动小班课等场景。 按房间内所有用户产生的视频时长和音频时长来统计用量。视频时长是指用户进入房间后订阅了音视频流并且成功接收到了视频画面的时间。 根据用户实际接收到的视频分辨率划分视频档位,然后分别对不同档位的视频通话时长进行计费。 具体请参见视频通话费用。 增值服务 云端录制 对音视频通话、互动直播的音视频内容进行录制,用于回放、 内容审核 等。 按云端录制输出结果的录制总时长进行计费。 录制时长分为音频时长和视频时长。视频时长会根据用户录制视频分辨率划分视频档位,然后分别对不同档位的录制时长进行计费。 具体请参见云端录制费用。 说明: 由于录制文件是存储在OBS中的,因此,产生的存储费用由OBS单独收取,具体价格详情请参见OBS-产品价格详情。 云端合流转码 对房间内各路音视频流按需进行合流转码,转码后输出的音视频流可旁路推流至云端录制或直播CDN观看。 按云端合流转码后输出的转码时长来统计合流转码服务的用量。转码时长分为音频时长和视频时长。视频时长会根据转码后输出的视频分辨率划分视频档位,然后分别对不同档位的视频时长进行计费。 具体请参见云端合流转码费用。
  • 计费模式 华为云实时音视频服务暂只支持按需付费模式,即在每个计费周期分别统计各资源的实际使用量,并根据使用量*单价的方式计算出费用,然后从账户余额中扣除对应金额。 按需购买的资源计费规则: 标准计费:根据使用时长(次数,量)“单位价格”计算出价格后,截取到“分”扣费。 阶梯计费:例如对象储存,根据“使用量”单位价格“时长”计算出价格后,截取到“分”扣费。 在按需付费模式下,价格计算器上的金额如果遇小数点,则保留小数点后两位,第三位四舍五入。如遇四舍五入后不足¥0.01,则按¥0.01展示。
  • 视频通话费用 表4 视频通话价格 产品规格 单价(元/分钟) FHD(超清) 0.105 HD(高清) 0.028 SD(标清) 0.014 Audio(音频) 0.007 计费规则 根据用户实际接收到的视频分辨率划分视频档位,然后分别对不同档位的视频通话时长进行计费。若使用自定义分辨率,则按宽高乘积计费。 表5 视频分辨率 视频档位 视频分辨率 FHD(超清) 1280*720 - 1920*1080(含) HD(高清) 640*480 - 1280*720(含) SD(标清) 不高于640*480(含) 用户订阅视频时,只统计一次视频时长,不会重复计算语音时长。 单个用户同时订阅多路视频时,其订阅的每一路视频时长将分别统计后叠加计算。 语音时长是视频通话场景下的语音时长。只有当用户没有订阅视频时,才会统计语音时长。 用户成功进入房间后,只要没有订阅视频,即使不上行推流也会统计语音时长。 计费公式 视频通话费用 = 语音时长用量 × 语音通话规格单价 + 视频时长用量 × 视频通话规格单价 计费示例 场景一(纯语音通话) 用户 A、B、C进入房间停留30分钟,三人始终未订阅接受视频画面,按照语音进行计费。则本次通话产生的总费用为:用户A产生的费用 + 用户B产生的费用 + 用户C产生的费用 = 30分钟*0.007元/分钟 * 3=0.63元。 说明:用户接收多路音频时,只按一路进行计费。 用户 订阅用户 分辨率和时长 费用(元) A B、C 音频 30分钟 0.007*30 B A、C 音频 30分钟 0.007*30 C A、B 音频 30分钟 0.007*30 场景二(两人视频通话) 用户A、B视频通话30分钟,A订阅视频分辨率1280 × 720(高清),B订阅视频分辨率640 × 480(标清),则本次产生的视频通话费用为:30分钟*0.028元/分钟+30分钟*0.014元/分钟 = 1.26(元) 用户 订阅用户 分辨率和时长 费用(元) A B 1280 × 720(高清) 30分钟 0.028*30 B A 640 × 480(标清) 30分钟 0.014*30 场景三(多人视频通话) 用户A、B、C在同一房间持续停留30分钟,A、B、C均始终接收另外两方的视频流,则本次产生的视频通话费用为:(20分钟*0.028元/分钟 + 10分钟*0.014元/分钟)*4 + (30分钟*0.014元/分钟)*2 = 3.64(元) 用户 订阅用户 分辨率和时长 费用(元) A B 1280 × 720(高清) 前20分钟 640 × 480(标清) 后10分钟 0.028*20 + 0.014*10 C 1280 × 720(高清) 前20分钟 640 × 480(标清) 后10分钟 0.028*20 + 0.014*10 B A 640 × 480(标清) 30分钟 0.014*30 C 1280 × 720(高清) 前20分钟 640 × 480(标清) 后10分钟 0.028*20 + 0.014*10 C A 640 × 480(标清) 30分钟 0.014*30 B 1280 × 720(高清) 前20分钟 640 × 480(标清) 后10分钟 0.028*20 + 0.014*10 场景四(视频/语音通话混合) 用户A、B、C在同一房间持续停留30分钟。A、B、C接收另外两方音视频流如下表所示: 用户 订阅用户 分辨率和时长 费用(元) A B 1280 × 720(高清) 前20分钟 640 × 480(标清) 后10分钟 0.028*20 + 0.014*10 C 纯音频 30分钟 0.007*30 B A 640 × 480(标清) 30分钟 0.014*30 C 纯音频 30分钟 0.007*30 C A 640 × 480(标清) 30分钟 0.014*30 B 1280 × 720(高清) 前20分钟 640 × 480(标清) 后10分钟 0.028*20 + 0.014*10 本次产生的通话费用为:(20分钟*0.028元/分钟 + 10分钟*0.014元/分钟)*2 + (30分钟*0.014元/分钟)*2 + (30分钟*0.007元/分钟)*2= 2.66(元)
  • Solution as Code一键式部署类最佳实践 为帮助企业高效上云,华为云Solution as Code萃取丰富上云成功实践,提供一系列基于华为云可快速部署的解决方案,帮助用户降低上云门槛。同时开放完整源码,支持个性化配置,解决方案开箱即用,所见即所得。 表1 Solution as Code一键式部署类最佳实践汇总 一键式部署方案 说明 相关服务 基于VPCEP实现跨VPC连接ELB 该解决方案基于VPC终端节点 VPCEP和终端节点服务,帮助用户快速实现同一区域不经过公网、跨虚拟私有云 VPC的弹性负载均衡 ELB后端服务访问 VPC、ECS、ELB、VPCEP 基于SNAT实现公网访问解决方案 该解决方案能帮用户快速实现多个无弹性公网IP的云主机安全访问互联网,轻松构建VPC的公网出口 VPC、ECS、NAT、EIP
  • 网段类型简介 IPv4:创建VPC及子网时,默认创建的网段为IPv4类型。IPv4网络无法访问Internet上的IPv6服务或为使用IPv6终端的用户提供访问服务。搭建IPv4地址网络请参见搭建IPv4网络。 IPv6:当您需要访问Internet上的IPv6服务或为使用IPv6终端的用户提供访问服务时,需要在配置时开启IPv6功能,开启后,您将拥有IPv4和IPv6两个网段,可以为IPv4和IPv6终端用户提供访问服务。搭建IPv6地址网络请参见搭建IPv6网络。
  • 支持哪些型号的Ascend芯片? 目前支持Ascend Snt3和Snt9。Ascend应用案例请参见Ascend应用样例。 模型训练:支持使用Snt9训练模型。其中ModelArts提供了可直接使用Snt9训练的算法。 模型推理:在ModelArts中将模型部署上线为在线服务时,支持使用Snt3规格资源进行模型推理。 模型转换:针对不适用于Ascend芯片的模型,您可以使用ModelArts转换模型,转换后的模型可以应用于Ascend芯片,当前ModelArts转换的模型支持Ascend Snt3芯片。在ModelArts中,转换模型仅支持使用Caffe或TensorFlow框架开发的模型。 父主题: 一般性问题
  • 训练作业参数填写应该注意什么? 训练作业参数填写需要您注意以下几点: 如果已配置算法来源和数据来源,则下方的运行参数,将根据选择的对象自动填写“data_url”,无法直接在运行参数中直接修改。 图1 自动填充的运行参数 在创建训练作业配置运行参数时,只需要填写对应的参数与参数值,如图2所示。 图2 配置运行参数 训练作业中的参数值为OBS桶路径时,需要使用数据对应的路径,且以“obs://”开头。如图3所示。 图3 配置参数OBS路径 在代码中创建OBS文件夹时,需要调用MoXing的API,具体方法如下: import moxing as mox mox.file.make_dirs('obs://bucket_name/sub_dir_0/sub_dir_1') 父主题: 创建训练作业
  • 相关最大连接数配置 如果 GaussDB 连接数过高,会消耗服务器大量资源,导致操作响应变慢,参考以下几个参数进行优化,具体内容请参见连接设置: max_connections:允许和数据库连接的最大并发连接数,此参数会影响集群的并发能力。 max_inner_tool_connections:允许和数据库连接的工具的最大并发连接数,此参数会影响GaussDB的工具连接并发能力。 sysadmin_reserved_connections:为管理员用户预留的最少连接数,不建议设置过大。该参数和max_connections参数配合使用,管理员用户的最大连接数等于max_connections + sysadmin_reserved_connections。 该参数属于POSTMASTER类型参数,具体内容请参见设置参数中对应设置方法进行设置。 父主题: 安全介绍
  • 身份认证 Console界面本租户IAM用户访问LakeFormation。 LakeFormation针对界面下发的HTTPS请求中IAM Token进行认证,识别出租户、IAM用户等身份。认证失败则拒绝请求。 Console界面其他租户IAM用户切换到本租户的委托角色来访问LakeFormation。 LakeFormation针对界面下发的HTTPS请求中IAM Token进行认证,识别出委托方租户、委托、被委托方租户、被委托方IAM用户等身份。认证失败则拒绝请求。 其他云服务(如 MRS )的实例或集群以本租户的委托身份来访问LakeFormation。 LakeFormation针对界面下发的HTTPS请求中IAM Token进行认证,识别出委托方租户(本租户)、委托、被委托方租户(ECS云服务账号)、被委托方IAM用户(ECS云服务内置用户)等身份。认证失败则拒绝请求。
  • 资产的访问控制 元数据信息的访问控制 LakeFormation实例针对Console或其他云服务的元数据访问请求,在经过身份认证后,首先进行IAM鉴权,检查用户是否具备请求中的元数据操作权限,接着再进行细粒度的鉴权,检查用户是否具备针对请求中的具体元数据的请求操作权限。鉴权失败则拒绝请求。 数据权限策略信息的访问控制 LakeFormation实例针对Console或其他云服务的元数据访问请求,在经过身份认证后,进行IAM鉴权,检查用户是否具备请求中的权限策略操作权限。鉴权失败则拒绝请求。
  • 区域与可用区 通常用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region)指物理的数据中心。每个区域完全独立,这样可以实现一定程度的容错能力和稳定性。资源创建成功后不能更换区域。 可用区(AZ,Availability Zone)是同一区域内,电力和网络互相隔离的物理区域,一个可用区不受其他可用区故障的影响。一个区域内可以有多个可用区,不同可用区之间物理隔离,但内网互通,既保障了可用区的独立性,又提供了低价、低时延的网络连接。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。 父主题: 基本概念
  • GDS-Kafka入库模式 GDS-Kafka的数据入库都是先将数据copy至临时表,然后再根据客户的使用场景以及目标表有无主键进行merge或者insert,详见下表: 表2 GDS-Kafka入库模式 入库操作 app.insert.directly 是否主键表 入库模式 insert true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 是 根据主键从临时表merge到目标表。 否 使用insert select从临时表写入到目标表。 delete true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 说明: delete操作支持标记删除,通过配置app.del.flag参数可以指定删除标记字段,如果配置了标记删除字段,则会通过将删除字段设置为1来标记删除的记录。 是 如果设置了delflag字段,则会根据主键进行匹配merge,如果匹配到主键并且目标表中记录的pos小于临时表记录的pos,则会将delflag字段置为1,否则将插入一条新的记录。 如果没有设置delflag字段,则会根据主键进行匹配,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将目标表中匹配到的记录删除。 否 如果设置了delflag字段,则会使用临时表中记录的所有字段与目标表进行匹配merge,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将delflag字段值置为1,否则将插入一条新的记录。 如果没有设置delflag字段,则会使用临时表中记录的所有字段与目标表进行匹配,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将目标表中匹配到的记录删除。 update true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 说明: update操作会被拆分,将before或者beforeImage中的消息拆分为delete操作,将after或者afterImage中的消息拆分为insert操作,然后再按照insert和delete的行为进行入库处理。 是 相当于有主键表的insert+delete操作。 否 相当于无主键表的insert+delete操作。
  • 使用yaml配置GFortran构建 1 2 3 4 5 6 7 8 version: 2.0 # 必须是2.0 steps: BUILD: - fortran: inputs: command: |- gfortran -c -fpic helloworld.f90 gfortran -shared -o helloworld.so helloworld.o 参数名 参数类型 描述 是否必填 默认值 command string 执行命令。 是 无 父主题: 单任务配置
  • 使用yaml配置代码下载 配置参考如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: 2.0 # 必须是2.0 steps: PRE_BUILD: - checkout: name: checkout inputs: scm: codehub # 代码来源:支持Repo和opensource url: xxxxxxxxx # 拉取代码的ssh地址。 branch: ${codeBranch} # 任何时候都必填,支持参数化 commit: ${commitId} lfs: true submodule: true depth: 100 tag: ${tag} path: test 参数说明如下: 参数名 参数类型 描述 是否必填 默认值 scm string 源码源:当前只支持CodeArts Repo,如果yaml中没配置,则使用构建任务配置的代码仓信息。 否 codehub url string 拉取代码的ssh地址。 是 无 branch string 拉取的代码分支:支持参数化。 是 无 commit string commitId构建时拉取的commitId:支持参数化。 否 无 tag string tag构建时拉取的tag:支持参数化,如果commitId和tag同时存在,优先执行commitId构建。 否 无 depth int 浅克隆深度:当选择commitId构建时,depth必须大于等于commitId所在深度。 否 1 submodule bool 是否拉取子模块:true为拉取;false为不拉取。 否 false lfs bool 是否开启git lfs:为true时会执行git lfs pull。 否 false path string clone的子路径:代码将会下载到子目录下面。 否 无 父主题: 单任务配置
共100000条