华为云用户手册

  • Step3 准备训练脚本并上传至OBS 准备本案例所需的训练脚本mnist.py,并上传至OBS桶的“obs://test-modelarts/tensorflow/code/”文件夹下。 mnist.py文件内容如下: import argparse import tensorflow as tf parser = argparse.ArgumentParser(description='TensorFlow quick start') parser.add_argument('--data_url', type=str, default="./Data", help='path where the dataset is saved') args = parser.parse_args() mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data(args.data_url) x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy']) model.fit(x_train, y_train, epochs=5)
  • Step2 构建成功的镜像注册到镜像管理模块 将Step1 在Notebook中构建一个新镜像中构建成功的 自定义镜像 注册到镜像管理中,方便后续使用。 登录ModelArts控制台,在左侧导航栏中选择“镜像管理”,单击“注册镜像”,进入注册镜像页面。 输入镜像源地址,选择架构和类型后,单击“立即注册”。 “镜像源”:地址为 swr.cn-north-4-myhuaweicloud.com/custom_test/tensorflow2.1:1.0.0。其中custom_test/tensorflow2.1:1.0.0为8镜像构建脚本中设置的镜像地址。 “架构”:选择X86_64 “类型”:选择CPU 图1 注册镜像 注册完成后,可以在镜像管理页面查看到注册成功的镜像。 父主题: 在开发环境中构建并调试推理镜像
  • Tensorflow框架启动原理 规格和节点个数 下面以选择“GPU: 8*GP-Vnt1 | CPU: 72核 | 内存:512GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。 单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。 分布式作业时(即选择的节点数大于1),ModelArts会优先在相同节点上启动一个parameter server(以下简称ps)和一个worker,其中ps将分配一半的CPU和内存资源,即ps拥有“CPU: 36核 | 内存:256GB”的计算资源,worker拥有“GPU: 8*GP-Vnt1 | CPU: 36核 | 内存:256GB”的计算资源。 需要注意的是ps只会分配到CPU和内存资源,而worker除CPU和内存外,还可能分配到加速卡(纯CPU规格除外)。如本例中,每个worker将分配到八张GP Vnt1加速卡,如果ps和worker在相同节点上启动,则磁盘资源由ps和worker共享。 网络通信介绍 单机作业不涉及网络通信情况。 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。 节点内网络 节点内网络通信即同一个节点上的ps和woker间的网络通信,又可以分为两种情况:容器网络和主机网络。 在使用公共规格进行训练时,使用的是容器网络。 在使用专属池训练时,如果节点配置的是RoCE网卡,使用的是主机网络;如果节点配置的是Infiniband网卡,使用的是容器网络。 节点间网络 分布式作业存在节点间ps和worker的通信,当前ModelArts主要提供了Infiniband网卡或RoCE网卡,带宽高达100Gb/s。
  • 镜像二:conda3-ubuntu18.04 表2 conda3-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 无 否 swr.{region_id}.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/user_defined_base:ubuntu_18.04-x86_64-20221008154718-2b3e39c PyPI 程序包 Ubuntu 软件包 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.3 ma-cau-adapter 1.1.3 ma-cli 1.1.5 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.21.6 pandas 1.3.5 pillow 9.2.0 pip 20.3.3 psutil 5.9.1 PyYAML 6.0 scipy 1.7.3 tornado 6.2 automake build-essential ca-certificates cmake cpp curl g++ gcc gfortran grep nginx python3 rpm tar unzip vim wget zip
  • 镜像一:conda3-cuda10.2-cudnn7-ubuntu18.04 表1 conda3-cuda10.2-cudnn7-ubuntu18.04镜像介绍 AI引擎框架 是否使用 GPU (CUDA 版本) URL 包含的依赖项 无 是 (cuda 10.2) swr.{region_id}.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c 例如: 华北-北京四 swr.cn-north-4.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c 华东-上海一 swr.cn-east-3.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c 华南-广州 swr.cn-south-1.myhuaweicloud.com/atelier/user_defined_base:cuda_10.2-ubuntu_18.04-x86_64-20221008154718-2b3e39c PyPI 程序包 Ubuntu 软件包 ipykernel 6.7.0 ipython 7.34.0 jupyter-client 7.3.4 ma-cau 1.1.3 ma-cau-adapter 1.1.3 ma-cli 1.1.5 matplotlib 3.5.1 modelarts 1.4.11 moxing-framework 2.1.0.5d9c87c8 numpy 1.21.6 pandas 1.3.5 pillow 9.2.0 pip 20.3.3 psutil 5.9.1 PyYAML 6.0 scipy 1.7.3 tornado 6.2 automake build-essential ca-certificates cmake cpp curl g++ gcc gfortran grep libcudnn7 libcudnn7-dev nginx python3 rpm tar unzip vim wget zip
  • 统一镜像列表 ModelArts提供了ARM+Ascend规格的统一镜像,包括MindSpore、PyTorch。适用于开发环境,模型训练,服务部署,请参考统一镜像列表。表1、表2所示镜像仅发布在西南-贵阳一区域。 表1 MindSpore 预置镜像 适配芯片 适用范围 mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 mindspore_2.1.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 mindspore_2.2.10-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 表2 PyTorch 预置镜像 适配芯片 适用范围 pytorch_1.11.0-cann_6.3.2-py_3.7-euler_2.10.7-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 pytorch_2.1.0-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署 pytorch_1.11.0-cann_7.0.0-py_3.9-hce_2.0.2312-aarch64-snt9b Ascend snt9b Notebook、训练、推理部署
  • 镜像安全加固 预置的基础镜像中存在cpp、gcc等调试/编译工具,如果您不需要使用这些工具,可以通过运行脚本删除。 创建一个run.sh脚本文件,文件中的代码内容如下。然后在容器中执行sh run.sh命令运行脚本。 #!/bin/bash delete_sniff_compiler() { echo "[+][001] start remove debug tools" rm -rf /usr/bin/readelf rm -rf /usr/bin/gcc-nm #readelf根据需要决定是否删除 #rm -rf /usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/aarch64-target-linux-gnu/bin/readelf rm -rf /usr/bin/gcc rm -rf /usr/bin/cpp rm -rf /usr/bin/objdump echo "[+] complete" } hardening_ssh_config() { sed -i "s/Subsystem/#Subsystem/g" /etc/ssh/sshd_config #关闭sftp服务 sed -i "s/^.MaxAuthTries.*/MaxAuthTries 6/g" /etc/ssh/sshd_config #开启防暴力机制 sed -i "s/^.ClientAliveInterval.*/ClientAliveInterval 300/g" /etc/ssh/sshd_config #开启会话超时机制 systemctl restart /etc/ssh/sshd_config chmod 600 /home/ma-user/.ssh/id_rsa* #收缩公私钥文件权限 chmod 600 /home/ma-user/etc/ssh_host_rsa_key* #收缩公私钥文件权限 sed -i "s/ma-user/#ma-user/g" /etc/sudoers #不允许ma-user用户免密执行所有命令 } delete_sniff_compiler hardening_ssh_config Ascend镜像中存在hcc编译器,具体说明请参见昇腾社区提供的HCC编译器说明文档。
  • 设置WORKDIR和CMD WORKDIR指令可以设置默认目录,也就是运行RUN / CMD / ENTRYPOINT指令的地方。 CMD指令可以设置容器创建时执行的默认命令。另外,您应该将命令写在一个数组中,数组中每个元素为命令的每个单词。 FROM node:7-alpine WORKDIR /app ADD . /app RUN npm install CMD ["npm", "start"]
  • 不要在构建中升级版本 为了降低复杂性、减少依赖、减小文件大小、节约构建时间,您应该避免安装任何不必要的包。例如,不要在数据库镜像中包含一个文本编辑器。 如果基础镜像中的某个包过时了,但您不知道具体是哪一个包,您应该联系它的维护者。如果您确定某个特定的包,比如foo需要升级,使用apt-get install -y foo就行,该指令会自动升级foo包。 apt-get upgrade会使得镜像构建过程非常不稳定,在构建时不确定哪些包会被安装,此时可能会产生不一致的镜像。因此通常会删掉apt-get upgrade。 删掉apt-get upgrade后,Dockerfile如下: FROM ubuntu ADD . /app RUN apt-get update RUN apt-get install -y nodejs RUN cd /app && npm install CMD npm start
  • 设置默认的环境变量、映射端口和数据库逻辑卷 运行Docker容器时很可能需要一些环境变量。在Dockerfile设置默认的环境变量是一种很好的方式。另外,应该在Dockerfile中设置映射端口和数据库逻辑卷。示例如下: FROM node:7-alpine ENV PROJECT_DIR=/app WORKDIR $PROJECT_DIR COPY package.json $PROJECT_DIR RUN npm install COPY . $PROJECT_DIR ENTRYPOINT ["./entrypoint.sh"] CMD ["start"] ENV指令指定的环境变量在容器中可以使用。如果您只是需要指定构建镜像时的变量,您可以使用ARG指令。
  • 使用EXPOSE暴露端口 EXPOSE指令用于指定容器将要监听的端口。因此,您应该为您的应用程序使用常见的端口。例如,提供Apache web服务的镜像应该使用EXPOSE 80,而提供MongoDB服务的镜像使用EXPOSE 27017。 对于外部访问,用户可以在执行docker run时使用一个标志来指示如何将指定的端口映射到所选择的端口。 FROM node:7-alpine ENV PROJECT_DIR=/app WORKDIR $PROJECT_DIR COPY package.json $PROJECT_DIR RUN npm install COPY . $PROJECT_DIR ENV APP_PORT=3000 EXPOSE $APP_PORT ENTRYPOINT ["./entrypoint.sh"] CMD ["start"]
  • 一个容器只运行一个进程 从技术角度讲,Docker容器中可以运行多个进程,您可以将数据库、前端、后端、ssh等都运行在同一个Docker容器中。但是,这样跟未使用容器前没有太大区别,且这样容器的构建时间非常长(一处修改就要构建全部),镜像体积大,横向扩展时非常浪费资源(不同的应用需要运行的容器数并不相同)。 通常所说的容器化改造是对应用整体微服务进行架构改造,改造后,再容器化。这样做可以带来如下好处: 单独扩展:拆分为微服务后,可单独增加或缩减每个微服务的实例数量。 提升开发速度:各微服务之间解耦,某个微服务的代码开发不影响其他微服务。 通过隔离确保安全:整体应用中,若存在安全漏洞,一旦被攻击,所有功能的权限都可能会被窃取。微服务架构中,若攻击了某个服务,只可获得该服务的访问权限,无法入侵其他服务。 提升稳定性:如果其中一个微服务崩溃,其他微服务还可以持续正常运行。 因此,上述企业门户网站可以进行如下改造,Web应用和MySQL运行在不同容器中。 MySQL运行在独立的镜像中,这样的好处就是,可以对它们分别进行修改,且不会牵一发而动全身。如下面这个例子所示,可以删除MySQL,只安装node.js。 FROM ubuntu ADD . /app RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y nodejs RUN cd /app && npm install CMD npm start
  • 合理调整COPY与RUN的顺序 将变化最少的部分放在Dockerfile的前面,这样可以充分利用镜像缓存。 示例中,源代码会经常变化,则每次构建镜像时都需要重新安装NPM模块,这显然不是希望看到的。因此可以先拷贝package.json,然后安装NPM模块,最后才拷贝其余的源代码。这样的话,即使源代码变化,也不需要重新安装NPM模块。 FROM node:7-alpine WORKDIR /app COPY package.json /app RUN npm install COPY . /app ENTRYPOINT ["./entrypoint.sh"] CMD ["start"]
  • 添加HEALTHCHECK 运行容器时,可以指定--restart always选项。这样的话,容器崩溃时,docker daemon会重启容器。对于需要长时间运行的容器,这个选项非常有用。但是,如果容器的确在运行,但是不可用怎么办?使用HEALTHCHECK指令可以让Docker周期性的检查容器的健康状况。只需要指定一个命令,如果一切正常的话返回0,否则返回1。当请求失败时,curl --fail命令返回非0状态。示例如下: FROM node:7-alpine LABEL com.example.version="0.0.1-beta" ENV PROJECT_DIR=/app WORKDIR $PROJECT_DIR COPY package.json $PROJECT_DIR RUN npm install COPY . $PROJECT_DIR ENV MEDIA_DIR=/media \ APP_PORT=3000 VOLUME $MEDIA_DIR EXPOSE $APP_PORT HEALTHCHECK CMD curl --fail http://localhost:$APP_PORT || exit 1 ENTRYPOINT ["./entrypoint.sh"] CMD ["start"]
  • 使用特定的标签 当镜像没有指定标签时,将默认使用latest标签。因此,FROM ubuntu指令等同于FROM ubuntu:latest。当镜像更新时,latest标签会指向不同的镜像,这时构建镜像有可能失败。 如下示例中使用16.04作为标签。 FROM ubuntu:16.04 RUN apt-get update && apt-get install -y nodejs ADD . /app RUN cd /app && npm install CMD npm start
  • 删除多余文件 假设更新了apt-get源,下载解压并安装了一些软件包,它们都保存在“/var/lib/apt/lists/”目录中。 但是,运行应用时Docker镜像中并不需要这些文件。因此最好将它们删除,因为它会使Docker镜像变大。 示例Dockerfile中,删除“/var/lib/apt/lists/”目录中的文件。 FROM ubuntu:16.04 RUN apt-get update \ && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* ADD . /app RUN cd /app && npm install CMD npm start
  • 选择合适的基础镜像 在示例中,选择了ubuntu作为基础镜像。但是只需要运行node程序,没有必要使用一个通用的基础镜像,node镜像应该是更好的选择。 更好的选择是alpine版本的node镜像。alpine是一个极小化的Linux发行版,只有4MB,这让它非常适合作为基础镜像。 FROM node:7-alpine ADD . /app RUN cd /app && npm install CMD npm start
  • 使用VOLUME管理数据库逻辑卷 VOLUME指令用于暴露任何数据库存储文件、配置文件或容器创建的文件和目录。强烈建议使用VOLUME来管理镜像中的可变部分和用户可以改变的部分。 下面示例中填写一个媒体目录。 FROM node:7-alpine ENV PROJECT_DIR=/app WORKDIR $PROJECT_DIR COPY package.json $PROJECT_DIR RUN npm install COPY . $PROJECT_DIR ENV MEDIA_DIR=/media \ APP_PORT=3000 VOLUME $MEDIA_DIR EXPOSE $APP_PORT ENTRYPOINT ["./entrypoint.sh"] CMD ["start"]
  • 将变化频率一样的RUN指令合一 Docker镜像是分层的,类似于洋葱,它们都有很多层,为了修改内层,则需要将外面的层都删掉。Docker镜像有如下特性: Dockerfile中的每个指令都会创建一个新的镜像层。 镜像层将被缓存和复用。 Dockerfile修改后,复制的文件变化了或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效。 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效。 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,只是这个文件在Docker容器中不可见。 将变化频率一样的指令合并在一起,目的是为了更好的将镜像分层,避免带来不必要的成本。如本例中将node.js安装与npm模块安装放在一起的话,则每次修改源代码,都需要重新安装node.js,这显然不合适。 FROM ubuntu ADD . /app RUN apt-get update \ && apt-get install -y nodejs \ && cd /app \ && npm install CMD npm start 因此,正确的写法是这样的: FROM ubuntu RUN apt-get update && apt-get install -y nodejs ADD . /app RUN cd /app && npm install CMD npm start
  • 使用ENTRYPOINT(可选) ENTRYPOINT指令并不是必须的,因为它会增加复杂度。ENTRYPOINT是一个脚本,它会默认执行,并且将指定的命令作为其参数。它通常用于构建可执行的Docker镜像。 FROM node:7-alpine WORKDIR /app ADD . /app RUN npm install ENTRYPOINT ["./entrypoint.sh"] CMD ["start"]
  • 前提条件 请使用Administrator用户执行Sysprep。 一个全新激活的Windows云服务器每次最多执行一次Sysprep,不能连续多次执行。 如果云服务器是由镜像文件创建而来,那么仅支持使用原镜像自带的Sysprep版本,且Sysprep必须始终从“%WINDIR%\system32\sysprep”目录运行。 Windows必须保证是正版激活状态,并且必须保证剩余Windows重置计数大于等于1,否则不能执行Sysprep封装。 在Windows命令行中输入以下命令,在“Windows Script Host”弹出窗中查看还能执行Sysprep的次数。 slmgr.vbs /dlv 当“剩余Windows重置计数”的值为0时,无法执行Sysprep。 图1 Windows Script Host
  • 操作步骤 进入Cloudbase-Init工具安装路径。 以Cloudbase-Init工具安装在“C:\Program Files\Cloudbase Solutions\”目录下为例。请切换至C盘根目录下,执行以下命令,进入安装目录。 cd C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf 执行以下命令,对Windows系统进行封装。 C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /unattend:Unattend.xml 请务必在执行该命令时,包含“/unattend:Unattend.xml”,否则您当前云服务器的用户名密码等重要配置信息会被重置,后续使用该Windows私有镜像创建的云服务器启动后仍然需要手动执行操作系统设置。 执行完该命令后,云服务器会自动关机。请在关机后使用该云服务器创建镜像,可以保证后续使用该镜像创建的云服务器SID唯一。如果重新启动已经执行过Sysprep操作的Windows云服务器,则执行的Sysprep操作仅对当前云服务器生效,创建镜像前需要重新执行Sysprep操作。 对于Windows Server 2012以及Windows Server 2012 R2操作系统,当云服务器执行完Sysprep操作后,云服务器的Administrator账号密码会被清除,请您登录云服务器后重新手动设置Administrator账号的密码,此时在管理控制台界面中设置的云服务器密码将无效,请您妥善保管重新设置的密码。 使用的Windows操作系统需要采用域账号登录时,请务必在创建私有镜像前执行Sysprep操作。执行Sysprep操作带来的影响请参考“Windows操作系统制作私有镜像为什么要执行Sysprep操作?”。 Windows云服务器中的Cloudbase-Init账户为Cloudbase-Init代理程序的内置账户,用于云服务器启动的时候获取元数据并执行相关配置。如果用户修改、删除此账户或者卸载Cloudbase-Init代理程序会导致通过此云服务器创建的Windows私有镜像所生成新的云服务器初始化的自定义信息注入失败。因此,不建议修改或删除Cloudbase-Init账户。 图2 执行Sysprep操作
  • 约束与限制 按需计费云数据库绑定的资源(弹性公网IP)可能不支持随实例同步变更计费模式,请参考表1查看绑定资源的计费规则及处理措施。 表1 弹性公网IP计费模式变更规则 资源 计费模式 计费方式 带宽类型 是否支持随GeminiDB Redis按需转包年/包月 处理措施 弹性公网IP 按需计费 按带宽计费 独享带宽 是 在控制台的弹性公网IP页面进行按需转包年/包月操作。 详细内容,请参见变更弹性公网IP计费方式。 弹性公网IP 按需计费 按流量计费 独享带宽 否 按需、按流量计费EIP不支持直接转为包年/包月EIP。变更方法如下: 先转为按需、按带宽计费的EIP。 再由按需、按带宽计费EIP转为包年/包月EIP。 详细内容,请参见变更弹性公网IP计费方式。
  • 使用须知 添加节点会触发快速负载均衡,可能出现请求超时,影响仅为秒级。建议业务侧有自动重试机制。 实例状态为正常、恢复检查中时可以添加节点。 实例进行添加节点时,该实例不可被删除。 如果搭建双活关系,不允许在主实例和备实例同时进行添加节点、删除节点和规格变更操作。 添加节点可能导致当前磁盘容量不足以支撑实例运行,需要先扩容磁盘,再添加节点。不同规格实例支持的存储容量,请参考实例规格说明。 当有节点处于关机状态时,不能添加节点。 添加节点目前只支持集群版实例。
  • 场景示例:核对资源用量是否与实际相符 假设用户在2023/04/08 10:09:06购买了一个按需计费GeminiDB Redis实例,并在2023/04/08 12:09:06时刻将其删除。 GeminiDB Redis实例流水账单 按需计费GeminiDB Redis实例按秒计费,每一个小时整点结算一次费用,您可以在流水账单中核对每一个计费周期的信息是否和实际相符,流水账单中计费资源是分开计费的,以“GeminiDB Redis存储”为例,具体如表1所示。 表1 GeminiDB Redis流水账单 产品类型 GeminiDB Redis 产品 GeminiDB Redis存储 计费模式 按需 消费时间 2023/04/08 10:09:06 ~ 2023/04/08 12:09:06时段计费系统将生成6笔流水账单,对应每一个计费周期,分别如下: 2023/04/08 10:09:06 ~ 2023/04/08 11:00:00 2023/04/08 11:00:00 ~ 2023/04/08 12:00:00 2023/04/08 12:00:00 ~ 2023/04/08 12:09:06 官网价 官网价=使用量*单价*容量 本例中,在第一个计费周期内GeminiDB Redis的使用量为3054秒,单价可在云数据库 GeminiDB价格详情中查询,以0.00378元/GB/小时为例,容量为40GB,那么官网价=(3054 ÷ 3600) * 0.00378 * 40 = 0.128268 元。同理,您可以计算剩余计费周期内资源的官网价。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 抹零金额 华为云产品 定价精度为小数点后8位(单位:元),因此在计费过程中会产生小数点后8位的资源使用费用。而在实际扣费时,仅扣除到小数点后2位,小数点后第3位到第8位部分金额会被舍弃,这种舍弃部分的金额称作抹零金额。 以第一个计费周期为例,抹零金额为:0.008268 元 应付金额 应付金额=官网价-优惠金额-抹零金额 以第一个计费周期为例,假设优惠金额为0,那么应付金额=0.128268 - 0 - 0.008268 = 0.12 元。 GeminiDB Redis实例明细账单 明细账单可以通过多维度展示客户账单的详细信息。一般通过设置统计维度为“按使用量”,统计周期为“按账期”来统计资源在某个月份的总开销,以“GeminiDB Redis存储”为例,建议您核对表2所示的信息是否和实际相符。 表2 GeminiDB Redis明细账单 产品类型 GeminiDB Redis 产品 GeminiDB Redis存储 计费模式 按需 资源名称/ID GeminiDB Redis的名称和ID 例如:nosql-b388,21e8811a64bf4de88bc2e2556da17983in12 规格 GeminiDB Redis存储 使用量类型 按需计费GeminiDB Redis的使用量类型为“时长” 单价 按需计费模式为简单 定价 (使用量*单价)时提供单价信息,其他的定价(如EIP公网带宽的阶梯定价)等不提供单价。 按需计费GeminiDB Redis属于简单定价,您可以在云数据库 GeminiDB价格详情中查中查询单价。 单价单位 在云数据库 GeminiDB价格详情中查中查询到的单价单位:元/GB/小时 使用量 按产品单价单位显示使用量,GeminiDB Redis的单价单位为元/GB/小时,因此使用量以小时为单位。本例中,2023/04/08 10:09:06 ~ 2023/04/08 12:09:06时段总计使用量为2小时。 使用量单位 小时 官网价 官网价=使用量*单价*容量 本例中,使用量为2小时,单价可在云数据库 GeminiDB价格详情中查中查询,以0.00378元/GB/小时为例,容量为40GB,那么官网价=2 * 0.00378 * 40 = 0.3024 元。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 应付金额 用户使用云服务享受折扣优惠后需要支付的费用金额。
  • 购买GeminiDB Redis实例时,如何选择合适的节点规格和节点数量? 购买Redis实例通常需要关注2个主要指标:QPS和数据量大小。购买GeminiDB Redis实例时,也是依据这两个指标进行选择,可以采用“快速选择”和“自定义”购买实例: 使用“快速选择”购买实例,例如原先采用的是16GB集群,可以对标选择GeminiDB Redis16GB集群。若对应的规格QPS不满足业务需求,则需要选择更高规格。 使用“自定义”选择时,计算和存储需要单独选择,节点规格和节点数量决定实例的QPS,实例总容量决定数据存储容量上限。选择节点规格、节点数量、实例总容量后,可以从“实例规格预览”查看所选择实例的QPS、连接数等信息。 父主题: 产品咨询
  • 约束与限制 包年/包月的云数据库绑定的资源(弹性公网IP)可能不支持随云数据库同步变更计费模式,请参考表1查看绑定资源的计费规则及处理措施。 表1 弹性公网IP计费模式变更规则 资源 计费模式 计费方式 带宽类型 是否支持随GeminiDB Redis包年/包月转按需 处理措施 弹性公网IP 包年/包月 按带宽计费 独享带宽 否 在控制台的弹性公网IP页面进行按需转包年/包月操作。 详细内容,请参见变更弹性公网IP计费方式。 弹性公网IP 包年/包月 按流量计费 独享带宽 否 包年/包月EIP不支持直接转为按需、按流量计费EIP。变更方法如下: 先转为按需、按带宽计费EIP。 再由按需、按带宽计费EIP转为按需、按流量计费EIP。 详细内容,请参见变更弹性公网IP计费方式。
  • 在进行 隐私保护通话 时,绑定成功了但呼叫不成功,导致问题的可能原因有哪些? 如果出现上述问题,请您先通过主被叫号码或X号码查看隐私保护通话平台推送的挂机状态和话单,参考挂机原因值、Q850原因值、呼叫拆线点分析呼叫失败原因。 如果没有填写接收呼叫状态和话单的地址(点击查看如何填写),请排查是否是以下原因导致呼叫失败: 华为云账户欠费导致呼叫失败。请登录华为云费用中心查看是否欠费,充值后再使用。 绑定关系问题: 绑定关系不存在。请调用接口或前往控制台查看绑定关系设置是否正确(如何查询绑定关系)。 绑定关系设置不正确。调用接口设置绑定关系时,号码格式填写不正确导致绑定关系设置不正确(绑定时提示成功,但实际未绑定成功)。请检查绑定关系设置时填写的号码格式是否正确: 手机号码格式为国家码(如+86)+手机号码(如138****0001),填写为"+86138****0001"。 固话号码为国家码(如+86)+不带前置0的区号(如755)+本地固话号码(如28****01),填写为"+8675528****01"。 绑定关系保持时长(duration参数)设置太短。导致通话还未接通,绑定关系就自动解绑了。请根据呼叫场景合理设置绑定关系保持时长。 未按设置的绑定关系拨打。如AXB模式,完成号码绑定后,使用除A和B号码外的其他无绑定关系的号码呼叫X号码,拨叫均会失败;使用A或B号码直接呼叫X号码方可呼叫成功。其他模式请参考隐私保护通话如何发起呼叫?如何使用隐私保护通话X号码呼叫? 被叫号码问题: 部分手机呼叫隐私号码时若带了“+86”(如“+86170****0001”)会导致呼叫失败。使用终端呼叫隐私号码(X号码/Y号码)时,请不要携带“+86”,直接拨打隐私号码,正确样例:170****0001。 通过隐私号码呼叫的被叫号码为中国香港、中国澳门、中国台湾或海外号码。由于外呼有风险,故限制外呼到以上地区。 如果是AX模式,A通过X号码呼叫别的号码呼叫失败。请确认呼叫前是否调用AX模式设置临时被叫接口设置了本次呼叫的临时被叫。临时被叫设置成功后,A用户才可通过拨打X号码呼叫被叫号码。 如果是AXE模式,其他用户呼叫A时,在听到“请输入分机号”的提示音后,输入正确的分机号后才能接通和隐私号码绑定的A号码。 被叫号码侧故障导致呼叫失败。请直呼该被叫号码测试该号码是否可以呼叫成功。 运营商限制: 被叫号码所在运营商拦截了号码。此情况一般发生在调测过程中,调试者短时间内多次调用业务接口呼叫某一固定区域的被叫号码,导致主显号码被拦截。建议不要在短时间内多次调用接口呼叫同一区域被叫。 建议客户退掉被拦截虚拟号,多购买几个虚拟号分担使用。 使用绑定的固话号码作为主叫号码导致呼叫失败。因运营商管控,当A/B为固话号码时,只能接收来自X号码的呼叫,不能作为主叫呼叫X号码。 由于运营商管控,当前平台要求使用X号码呼叫时,对外显示的号码必须设置为X号码,否则呼叫会被运营商拦截。 父主题: 呼叫相关问题
  • 步骤二:创建用户 在左侧导航栏,单击“用户管理”,进入“用户管理”页面。 单击“创建用户”,弹出“创建用户”对话框。 参考表1,设置用户名称和配置信息。 表1 用户参数说明 参数 说明 名称 自定义用户名称,用于识别不同的用户。 用户名创建成功后,不可修改。 密码 设置用户的密码。 确认密码 再次输入密码,确认本次输入的密码和“密码”中输入的一致。 Vhost 可访问的Vhost:在下拉框中选择用户可以访问的Vhost。 可配置的资源:为用户授予Vhost下资源的权限,使用正则表达式匹配资源。例如输入“^test-.*”,表示为用户授予Vhost下所有名称以“test-”开头的资源的权限。 可写的资源:为用户授予Vhost下资源的写权限,使用正则表达式匹配资源。例如输入“.*”,表示为用户授予Vhost下所有资源的写权限。 可读的资源:为用户授予Vhost下资源的读权限,使用正则表达式匹配资源。例如输入“.*”,表示为用户授予Vhost下所有资源的读权限。 如果需要授予用户多个Vhost的访问权限,单击“添加”,继续添加其他Vhost信息。 图1 创建用户 单击“确定”,完成用户的创建。
  • 内容审核 视频直播 不支持接入违反相关法律法规的 域名 ,包括但不限于: 涉黄、涉赌、涉毒、涉诈、侵权内容的网站 游戏私服类 盗版游戏/软件/盗版视频网站 P2P类金融网站 彩票类网站 违规医院和药品类网站 无法正常访问或内容不含有任何实质信息 如果您的直播加速域名含有以上违规的内容,您将自行承担相关风险。 如果发现涉黄、涉赌、涉毒、涉诈等违规行为,视频直播将执行域名封禁策略(删除相关加速域名且不允许再次接入,与违规域名使用相同源站的加速域名同样执行域名封禁策略),账号加速域名配额降为0。
共100000条