华为云用户手册

  • 挂载的弹性云服务器数量已达到最大 问题现象:挂载按钮为灰色。 解决思路: 非共享云硬盘:单击挂载按钮提示“只有可用状态的磁盘才能挂载”。 非共享云硬盘只能挂载至一台弹性云服务器,状态为“正在使用”说明已挂载,您可以先卸载云硬盘使状态变为“可用”,然后挂载至目标弹性云服务器。 共享云硬盘:单击挂载按钮提示“共享盘最大挂载16个云服务器”。 共享云硬盘最多可挂载至16台弹性云服务器,您可以根据业务情况,将云硬盘从某台弹性云服务器卸载,然后挂载至目标弹性云服务器。
  • 排查思路 以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。 如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。 表1 排查思路 问题现象 可能原因及处理措施 在“挂载磁盘”页面找不到目标云服务器。 查看云硬盘和云服务器是否位于同一可用区。 ISO镜像创建的弹性云服务器只建议用来装机,部分功能受限,不支持挂载云硬盘操作。 挂载按钮为灰色。 挂载的弹性云服务器数量已达到最大。 查看云硬盘是否已加入到复制对中。 挂载共享云硬盘提示操作系统类型不对。 解决方法请参考检查共享云硬盘挂载的多台云服务器操作系统是否一致。
  • 查看云硬盘和云服务器是否位于同一可用区 问题现象:单击“挂载”后,在“挂载磁盘”页面找不到目标弹性云服务器。 解决思路:云硬盘只能挂载至同一区域内同一可用区的弹性云服务器,“挂载磁盘”页面的列表已筛选出符合条件的弹性云服务器。 不再需要云硬盘内数据,直接删除或退订即可,然后购买与弹性云服务器在同一个可用区的云硬盘进行挂载使用。 需要云硬盘内的数据,可通过以下方式在其他可用区创建一个具有相同数据的云硬盘。 通过云硬盘创建备份。 图1 创建备份 再从备份创建新的云硬盘,创建过程中可以为云硬盘重新选择“可用区”,同时您也可以修改“磁盘类型”和“高级配置”等参数。 图2 从备份创建云硬盘 创建完成后,单击“挂载”,在“挂载磁盘”页面即可找到目标弹性云服务器。
  • 随弹性云服务器购买的系统盘或数据盘可以换挂载点吗 该场景仅讨论在原弹性云服务器上的挂载点切换。挂载至其他弹性云服务器请参见系统盘和数据盘之间可以随意转换吗。 随弹性云服务器购买的系统盘:卸载后,可以挂载至原弹性云服务器用作系统盘或数据盘。 每个弹性云服务器只能有一块系统盘,如果原弹性云服务器已有新的系统盘,则无法挂载用作系统盘。 随弹性云服务器购买的数据盘:卸载后,只能挂载至原弹性云服务器用作数据盘,无法用作系统盘。 父主题: 云硬盘挂载问题
  • 扩容后的云硬盘能否使用扩容前的备份或快照回滚数据 可以。如果云硬盘在扩容前创建了备份或快照,扩容操作不会影响原有的备份或快照,扩容后的云硬盘可以通过扩容前的备份或快照回滚数据。 回滚数据后的云硬盘状态等同于在控制台上扩容但未扩展分区和文件系统的云硬盘,要想使用新增容量,必须登录云服务器扩展分区和文件系统。 扩展磁盘分区和文件系统操作请参见: 扩展分区和文件系统(Windows) 分区和文件系统扩展概述(Linux) 父主题: 云硬盘扩容问题
  • Linux CentOS 6.5等较老版本的操作系统用fdisk创建分区时,默认为非4KiB对齐选择初始磁柱编号,对性能有较大的影响,建议针对该类操作系统,在创建分区时4KiB对齐选取初始磁柱编号。 本文以“CentOS 7.2 64位”操作系统为例,不同操作系统的格式化操作可能不同,本文仅供参考,具体操作步骤和差异请参考对应操作系统的产品文档。 测试性能前请先安装fio性能测试工具。 登录云服务器并切换为root用户。 进行性能测试之前,请执行以下步骤,确认磁盘分区的初始磁柱编号是否已经4KiB对齐。 fdisk -lu 回显类似如下信息: [root@ecs-centos sdc]# fdisk -lu Disk /dev/xvda: 10.7 GiB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x7db77aa5 Device Boot Start End Blocks Id System /dev/xvda1 * 2048 20968919 10483436 83 Linux Disk /dev/xvdb: 10.7 GiB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdc: 53.7 GiB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x3cf3265c Device Boot Start End Blocks Id System /dev/xvdc1 2048 41943039 20970496 83 Linux 如果start对应的初始磁柱编号能被8整除,则表示4KiB对齐,请执行3进行性能测试。 如果start对应的初始磁柱编号不能被8整除,则表示未4KiB对齐,如需继续测试请删除原有分区,重新按照4KiB对齐选择初始磁柱编号。 删除分区并重新按照4KiB对齐选取初始磁柱编号会导致磁盘原有数据的丢失,请谨慎操作。 执行以下命令,使用fio工具测试磁盘性能。 测试随机写IOPS:fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Write_IOPS_Test 测试随机读IOPS:fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_IOPS_Test 测试写吞吐量:fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Write_BandWidth_Test 测试读吞吐量:fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Read_BandWidth_Test 测试单队列随机读时延:fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=60 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_LATE_Test 使用fio工具进行裸盘性能测试时,不能在已创建文件系统的磁盘上测试,因为fio性能测试会破坏文件系统,导致磁盘变为只读,需要删除后重新购买。 请尽量不要在保存业务数据的磁盘上进行测试。如果需要,请按照以下建议操作: 在测试开始前对磁盘数据进行备份,防止误操作造成数据丢失。 在测试命令中指定filename参数为某个文件,例如-filename=/opt/fiotest/fiotest.txt。 测试fio相关参数说明如表1所示。 表1 参数说明 参数 说明 direct 定义是否使用direct IO,可选值如下: 值为0,表示使用buffered IO 值为1,表示使用direct IO iodepth 定义测试时的IO队列深度。 此处定义的队列深度是指每个线程的队列深度,如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的IO并发数=iodepth * numjobs。例如: 单线程,且-iodepth=32,则该线程的IO队列深度为32,fio总的IO并发数=32*1=32。 多线程(3个线程),且-iodepth=32,则3个线程的IO队列深度均为32,fio总的IO并发数=32*3=96。 rw 定义测试时的读写策略,可选值如下: 随机读:randread 随机写:randwrite 顺序读:read 顺序写:write 混合随机读写:randrw ioengine 定义fio如何下发IO请求,通常有同步IO和异步IO: 同步IO一次只能发出一个IO请求,等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。 异步IO则通常使用libaio这样的方式一次提交一批IO请求,然后等待一批的完成,减少交互的次数,会更有效率。 bs 定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。 size 定义测试IO操作的数据量,如果未指定runtime这类参数,fio会将指定大小的数据量全部读/写完成,然后才停止测试。 该参数的值,可以是带单位的数字,比如size=10G,表示读/写的数据量为10GiB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。 numjobs 定义测试的并发线程数。 runtime 定义测试时间。 如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/写完。 group_reporting 定义测试结果显示模式,group_reporting表示汇总每个进程的统计信息,而非以不同job汇总展示信息。 filename 定义测试文件(设备)的名称。 此处选择文件,则代表测试文件系统的性能。例如:-filename=/opt/fiotest/fiotest.txt 此处选择设备名称,则代表测试裸盘的性能。例:-filename=/dev/vdb 须知: 如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意filename选择指定文件,以避免覆盖文件系统和原有数据。 name 定义测试任务名称。
  • 操作须知 测试性能时,如果分区的初始磁柱编号是非4KiB对齐,则对性能影响较大,请先确保分区的初始磁柱编号已经4KiB对齐,再开始测试。 测试共享云硬盘性能时,必须满足以下要求: 共享云硬盘必须同时挂载至多台云服务器(弹性云服务器或者裸金属服务器)。 当共享云硬盘挂载至多台弹性云服务器时,这些弹性云服务器必须位于同一个策略为“反亲和性”的云服务器组内。 如果弹性云服务器不满足反亲和性,则共享云硬盘性能无法达到最佳。
  • 为什么无法从快照回滚恢复数据 如果无法从快照回滚数据,可能原因如下: 源云硬盘状态为“可用”或者“回滚数据失败”时才能回滚数据。如果源云硬盘状态为“正在使用”,请先卸载云硬盘再执行回滚数据操作,回滚成功后重新挂载云硬盘即可。 开头为“autobk_snapshot_vbs_”、“manualbk_snapshot_vbs_”、“autobk_snapshot_csbs_”、“manualbk_snapshot_csbs_”的快照,是创建备份时系统自动生成的快照。该快照仅支持查看详细信息,无法用于回滚数据。 父主题: 云硬盘快照问题
  • 排查思路 以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。 如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。 图1 排查思路 表1 排查思路 可能原因 处理措施 包周期云硬盘存在未生效的续费订单 解决方法请参考包周期云硬盘存在未生效的续费订单 包周期云硬盘存在未支付的扩容订单 解决方法请参考包周期云硬盘存在未支付的扩容订单 共享云硬盘未从所有弹性云服务器卸载 解决方法请参考共享云硬盘未从所有弹性云服务器卸载
  • 功能特性 漏洞管理服务可以帮助您快速检测出您的网站、主机、移动应用存在的漏洞,提供详细的漏洞分析报告,并针对不同类型的漏洞提供专业可靠的修复建议。 网站漏洞扫描 具有OWASP TOP10和WASC的漏洞检测能力,支持扫描22种类型以上的漏洞。 支持使用Ajax、JavaScript、Flash等技术构建网站,支持使用Tomcat、Apache、Nginx、IIS等Web容器部署的网站。 扫描规则云端自动更新,全网生效,及时涵盖最新爆发的漏洞。 支持静态页面和动态页面扫描。 支持HTTPS扫描。 一站式漏洞管理 提供漏洞修复建议。如果您需要查看修复建议,请购买专业版、高级版或者企业版。 支持下载扫描报告,用户可以离线查看漏洞信息。如果您需要下载扫描报告,请购买专业版、高级版或者企业版。 支持重新扫描。 支持弱密码扫描 多场景可用 支持操作系统(RDP协议、SSH协议)、数据库(如Mysql、Redis)等常见中间件弱口令检测。 丰富的弱密码库 丰富的弱密码匹配库,模拟黑客对各场景进行弱口令探测。 支持端口扫描 扫描服务器端口的开放状态,检测出容易被黑客发现的“入侵通道”。 自定义扫描 支持任务定时扫描。 支持基于用户名密码登录、基于自定义Cookie登录。 支持Web 2.0高级爬虫扫描。 支持自定义Header扫描。 支持手动导入探索文件来进行被动扫描。 主机漏洞扫描 支持深入扫描 通过配置验证信息,可连接到服务器进行OS检测,进行多维度的补丁、已知漏洞、配置检测。 支持操作系统典型服务协议SSH、SSL/TLS的识别和已知漏洞扫描。 支持内网扫描 可以通过跳板机方式访问业务所在的服务器,适配不同企业网络管理场景。 支持中间件扫描 丰富的扫描场景 支持主流Web容器、前台开发框架、后台微服务技术栈的版本漏洞和配置合规扫描。 多扫描方式可选 支持通过标准包或者自定义安装等多种方式识别服务器的中间件及其版本,全方位发现服务器的漏洞风险。 二进制成分分析 全方位风险检测 对软件包/固件进行全面分析,基于各类检测规则,获得相关被测对象的开源软件、信息泄露、安全配置、安全编译选项等存在的潜在风险。 支持各类应用 支持对桌面应用(Windows和Linux)、移动应用程序(APK、IPA、Hap等)、嵌入式系统固件等的检测。 专业分析指导 提供全面、直观的风险汇总信息,并针对不同的扫描告警提供专业的解决方案和修复建议。 移动应用安全 移动应用安全服务能快速扫描您的应用,并提供详细的检测报告,协助您快速定位修复问题。 全自动化测试 您只需上传Android、HarmonyOS应用文件提交扫描任务,即可输出详尽专业的测试报告。 支持工信部等4部委的合规要求进行检测,主要检测内容包括隐私声明和行为一致性检测、权限检测、隐私检测、安全问题检测等内容的自动化检测。 详细的测试报告 详尽的在线测试报告,一键即可下载,报告提供包括问题代码行、修复建议、调用栈信息、违规问题场景截图、关联隐私策略片段等信息。 支持第三方SDK隐私声明解析 针对第三方SDK隐私声明存在“表格”与“外链”两种展示方式。通过插桩方式获取应用隐私声明的url,继而提取并深度分析隐私声明内容。 支撑鸿蒙应用扫描 率先支持鸿蒙应用安全漏洞、隐私合规问题扫描。
  • 响应示例 状态码: 200 OK { "nodes" : [ { "name" : "string", "internal_ip" : "string", "hostname" : "string", "allocatable" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 }, "capacity" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 }, "allocated_resources" : { "request" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 }, "limit" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 } }, "status" : "string", "architecture" : "string", "labels" : { }, "node_type" : "string", "kernel_version" : "string", "os_image" : "string", "container_runtime_version" : "string", "kubernetes_version" : "string", "create_time" : "string" } ] }
  • URI GET /v3/{project_id}/clusters/{cluster_id}/nodes/{node_name} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。获取方法请参见 获取项目ID。 cluster_id 是 String 边缘集群ID 最小长度:1 最大长度:64 node_name 是 String 节点名称 最小长度:1 最大长度:64
  • 响应示例 状态码: 200 OK { "name" : "string", "internal_ip" : "string", "hostname" : "string", "allocatable" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 }, "capacity" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 }, "allocated_resources" : { "request" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 }, "limit" : { "cpu" : 0, "memory" : 0, "storage" : 0, "pods" : 0 } }, "status" : "Ready", "architecture" : "string", "labels" : { }, "node_type" : "string", "kernel_version" : "string", "os_image" : "string", "container_runtime_version" : "string", "kubernetes_version" : "string", "create_time" : "string" }
  • SDK列表 表1介绍了CAE提供的支持的SDK列表,您可以在GitHub仓库查看SDK历史更新、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导
  • 日志字段说明 本章节介绍了AntiDDoS日志包含的日志字段。 表2 全量日志字段说明 字段 说明 logType 日志类型。默认为“ip_attack_sum”,攻击日志。 deviceType 上报日志的设备类型。默认为“CLEAN”,清洗设备。 inKbps 入流量(单位:kbps)。 maxPps 入流量峰值(单位:pps)。 dropPps 丢弃的流量均值(单位:pps)。 maxAttackInBps 攻击流量峰值时刻的入流量值(单位:bps)。 currentConn 当前连接数。 zoneIP 防护的IP。 logTime 日志产生的时间。 attackType 攻击类型,对应的攻击类型请参考表3。 inPps 入流量(单位:pps)。 maxKbps 入流量峰值(单位:kbps)。 dropKbps 丢弃的流量均值(单位:kbps)。 startTime 攻击开始时间。 endTime 攻击结束时间,为空时则表示攻击还未结束。 maxAttackInConn 攻击流量峰值时刻的连接数。 newConn 新建连接数。 表3 攻击类型说明 数值 攻击类型 0-9 自定义服务攻击 10 Syn Flood攻击 11 Ack Flood攻击 12 SynAck Flood攻击 13 Fin/Rst Flood攻击 14 并发连接数超过阈值 15 新建连接数超过阈值 16 TCP分片报文攻击 17 TCP分片BandWidth limit攻击 18 TCP BandWidth limit攻击 19 UDP flood攻击 20 UDP分片攻击 21 UDP分片BandWidth limit攻击 22 UDP BandWidth limit攻击 23 ICMP BandWidth limit攻击 24 Other BandWidth limit攻击 25 总流量限流 26 HTTPS Flood攻击 27 HTTP Flood攻击 28 保留 29 DNS Query Flood攻击 30 DNS Reply Flood攻击 31 Sip Flood攻击 32 黑名单丢弃 33 HTTP URL行为异常 34 TCP分片abnormal丢弃流量 35 TCP abnormal丢弃流量 36 UDP分片abnormal丢弃流量 37 UDP abnormal丢弃流量 38 ICMP abnormal攻击 39 Other abnormal攻击 40 Connection Flood攻击 41 域名劫持攻击 42 DNS投毒攻击报文 43 DNS反射攻击 44 超大DNS报文攻击 45 DNS源请求速率异常 46 DNS源回应速率异常 47 DNS域名请求速率异常 48 DNS域名回应包速率异常 49 DNS请求报文TTL异常 50 DNS报文格式异常 51 DNS Cache匹配丢弃攻击 52 端口扫描攻击 53 TCP Abnormal攻击(tcp 报文标记位异常) 54 BGP攻击 55 UDP关联防范异常 56 DNS NO such Name异常 57 Other 指纹攻击 58 防护对象限流攻击 59 HTTP慢速攻击 60 恶意软件防范 61 域名阻断 62 FILTER过滤 63 Web攻击抓包 64 SIP源限速攻击
  • 云审计服务支持的Anti-DDoS操作列表 云审计服务(Cloud Trace Service,CTS)记录了Anti-DDoS相关的操作事件,方便用户日后的查询、审计和回溯,具体请参见云审计服务用户指南。 云审计服务支持的Anti-DDoS操作列表如表1所示。 表1 CTS支持的Anti-DDoS操作列表 操作名称 事件名称 开启Anti-DDoS防护 OPEN_ANTIDDOS 修改Anti-DDoS防护配置 UPDATE_ANTIDDOS 设置LTS全量日志配置 UPDATE_LTS_CONFIG 批量添加/编辑TMS资源标签 UPDATE_RESOURCE_TAGS 批量删除TMS资源标签 DELETE_RESOURCE_TAGS 更新租户的告警提醒配置情况 UPDATE_ALERT_CONFIG 修改流量清洗阈值默认档位 UPDATE_DEFAULT_CONFIG 删除流量清洗阈值默认档位 DELETE_DEFAULT_CONFIG 父主题: 审计
  • 日志字段说明 本章节介绍了DDoS原生高级防护日志包含的日志字段。 表2 关键字段说明 字段 说明 currentConn 当前连接数。 maxInPps 入报文峰值(单位:pps)。 newConn 新建连接数。 deviceType 上报日志的设备类型。默认为“CLEAN”,清洗设备。 attackTypes 攻击类型,具体请参考表3。 zoneIP 防护的IP。 logType 日志类型。默认为“ip_attack_sum”,攻击日志。 maxDropPps 攻击报文峰值(单位:pps)。 maxInKbps 入流量峰值(单位:kbps)。 startTime 攻击开始时间。 endTime 攻击结束时间,为空时则表示攻击还未结束。 maxDropKbps 攻击流量峰值(单位:kbps)。 attackStatus 攻击状态。 ATTACK:攻击状态。 NORMAL:正常状态。 表3 攻击类型说明 数值 攻击类型 0-9 自定义服务攻击 10 Syn Flood攻击 11 Ack Flood攻击 12 SynAck Flood攻击 13 Fin/Rst Flood攻击 14 并发连接数超过阈值 15 新建连接数超过阈值 16 TCP分片报文攻击 17 TCP分片BandWidth limit攻击 18 TCP BandWidth limit攻击 19 UDP flood攻击 20 UDP分片攻击 21 UDP分片BandWidth limit攻击 22 UDP BandWidth limit攻击 23 ICMP BandWidth limit攻击 24 Other BandWidth limit攻击 25 总流量限流 26 HTTPS Flood攻击 27 HTTP Flood攻击 28 保留 29 DNS Query Flood攻击 30 DNS Reply Flood攻击 31 Sip Flood攻击 32 黑名单丢弃 33 HTTP URL行为异常 34 TCP分片abnormal丢弃流量 35 TCP abnormal丢弃流量 36 UDP分片abnormal丢弃流量 37 UDP abnormal丢弃流量 38 ICMP abnormal攻击 39 Other abnormal攻击 40 Connection Flood攻击 41 域名劫持攻击 42 DNS投毒攻击报文 43 DNS反射攻击 44 超大DNS报文攻击 45 DNS源请求速率异常 46 DNS源回应速率异常 47 DNS域名请求速率异常 48 DNS域名回应包速率异常 49 DNS请求报文TTL异常 50 DNS报文格式异常 51 DNS Cache匹配丢弃攻击 52 端口扫描攻击 53 TCP Abnormal攻击(tcp 报文标记位异常) 54 BGP攻击 55 UDP关联防范异常 56 DNS NO such Name异常 57 Other 指纹攻击 58 防护对象限流攻击 59 HTTP慢速攻击 60 恶意软件防范 61 域名阻断 62 FILTER过滤 63 Web攻击抓包 64 SIP源限速攻击
  • 日志字段说明 本章节介绍了DDoS高防日志包含的日志字段。 表2 实例攻击日志字段说明 字段 说明 ip 被攻击IP。 ip_id 被攻击IP的ID。 attack_type 攻击的类型。 attack_protocol 该字段尚未使用,默认是0。 attack_start_time 攻击开始时间,毫秒级时间戳。 attack_status 攻击状态。 ATTACK:攻击中。 NORMAL:攻击结束。 drop_kbits 分钟级别的最大攻击流量,单位“bit”。 attack_pkts 分钟级别的最大攻击报文数。 duration_elapse 已结束安全事件的持续时间,单位“秒”。 end_time 攻击结束时间,毫秒级时间戳。未结束的安全事件,该字段为0。 max_drop_kbps 攻击流量的峰值,单位“kbps”。 max_drop_pps 攻击报文的峰值,单位“pps”。 表3 实例攻击详情字段说明 字段 说明 attackStatus 攻击状态。 attackType 攻击状态。 ATTACK:攻击中。 NORMAL:攻击结束。 attackTypeDescCn 攻击类型(中文)。 attackTypeDescEn 攻击类型(英文)。 attackUnit 攻击单位。 attacker 攻击来源。 attackerKbps 攻击流量峰值,单位“kbps”。 attackerPps 攻击流量峰值,单位“pps”。 direction 日志方向。 inbound:入方向。 outbound:出方向。 dropKbits 丢弃的流量总数,单位“kbits”。 dropPackets 丢弃的报文总数。 duration 攻击持续时间,单位“秒”。 handleTime 处理日志时间。 logTime 日志时间。 logType 日志类型。 maxDropKbps IP丢弃流量峰值,单位“kbps”。 maxDropPps IP丢弃流量峰值,单位“pps”。 port 端口号。 startTimeAlert 异常开始时间。 timeScale 时间标识(处理分钟级或小时级数据的标识)。 valid 是否成功解析到日志。 writeTime 持久化时间。 zoneIP 防护IP。 startTimeAttack 攻击开始时间。 startTimeKey 对于同一个攻击不同时间的唯一标识。
  • 新旧版训练代码适配的差异 旧版训练中,用户需要在输入输出数据上做如下配置: #解析命令行参数 import argparse parser = argparse.ArgumentParser(description='MindSpore Lenet Example') parser.add_argument('--data_url', type=str, default="./Data", help='path where the dataset is saved') parser.add_argument('--train_url', type=str, default="./Model", help='if is test, must provide\ path where the trained ckpt file') args = parser.parse_args() ... #下载数据参数至容器本地,在代码中使用local_data_path代表训练输入位置 mox.file.copy_parallel(args.data_url, local_data_path) ... #上传容器本地数据至obs路径 mox.file.copy_parallel(local_output_path, args.train_url)
  • 如何提高训练作业资源利用率 适当增大batch_size:较大的batch_size可以让GPU/NPU计算单元获得更高的利用率,但是也要根据实际情况来选择batch_size,防止batch_size过大导致内存溢出。 提升数据读取的效率:如果读取一个batch数据的时间要长于GPU/NPU计算一个batch的时间,就有可能出现GPU/NPU利用率上下浮动的情况。建议优化数据读取和数据增强的性能,例如将数据读取并行化,或者使用NVIDIA Data Loading Library(DALI)等工具提高数据增强的速度。 模型保存不要太频繁:模型保存操作一般会阻塞训练,如果模型较大,并且较频繁地进行保存,就会影响GPU/NPU利用率。同理,其他非GPU/NPU操作尽量不要阻塞训练主进程太多的时间,如日志打印,保存训练指标信息等。
  • 相关操作 关闭MindInsight方式如下: 方式1:在开发环境JupyterLab中的.ipynb文件窗口中输入命令,关闭 MindInsight。端口号在启动MindInsight中设置,默认使用8080,需要替换为实际开启MindInsight时的端口。 !mindinsight stop --port 8080 方式2:单击下方按钮进入MindInsight实例管理界面,该界面记录了所有启动的MindInsight实例,单击对应实例后面的SHUT DOWN即可停止该实例。 图8 单击SHUT DOWN停止实例 方式3:单击下方红框中的按钮可以关闭所有启动的MindInsight实例。 图9 关闭所有启动的MindInsight实例 方式4(不推荐):直接在JupyterLab中上关闭MindInsight窗口,此方式仅是关闭MindInsight可视化窗口,并未关闭后台。
  • Step2 上传Summary数据 在开发环境中使用MindInsight可视化功能,需要用到Summary数据。 Summary数据可以直接传到开发环境的这个路径下/home/ma-user/work/,也可以放到OBS并行文件系统中。 Summary数据上传到Notebook路径/home/ma-user/work/下的方式,请参见上传数据至Notebook。 Summary数据如果是通过OBS并行文件系统挂载到Notebook中,请将模型训练时产生的Summary文件先上传到OBS并行文件系统,并确保OBS并行文件系统与ModelArts在同一区域。在Notebook中启动MindInsight时,Notebook会自动从挂载的OBS并行文件系统目录中读取Summary数据。
  • 添加输出目录 添加输出目录的代码比较简单,即在代码中添加一个输出评估结果文件的目录,被称为train_url,也就是页面上的训练输出位置。并把train_url添加到使用的函数analysis中,使用save_path来获取train_url。示例代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 FLAGS = tf.app.flags.FLAGS tf.app.flags.DEFINE_string('model_url', '', 'path to saved model') tf.app.flags.DEFINE_string('data_url', '', 'path to output files') tf.app.flags.DEFINE_string('train_url', '', 'path to output files') tf.app.flags.DEFINE_string('adv_param_json', '{"attack_method":"FGSM","eps":40}', 'params for adversarial attacks') FLAGS(sys.argv, known_only=True) ... # analyse res = analyse( task_type=task_type, pred_list=pred_list, label_list=label_list, name_list=file_name_list, label_map_dict=label_dict, save_path=FLAGS.train_url)
  • 拷贝数据集到本地 拷贝数据集到本地主要是为了防止长时间访问OBS容易导致OBS连接中断使得作业卡住,所以一般先将数据拷贝到本地再进行操作。 数据集拷贝有两种方式,推荐使用OBS路径进行处理拷贝。 OBS路径(推荐) 直接使用moxing的copy_parallel接口,拷贝对应的OBS路径。 ModelArts数据管理中的数据集(即manifest文件格式) 使用moxing的copy_manifest接口将文件拷贝到本地并获取新的manifest文件路径,然后使用SDK解析新的manifest文件。 ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。
  • Step3 启动TensorBoard 在开发环境的JupyterLab中打开TensorBoard有多种方法。可根据使用习惯选择。 图1 JupyterLab中打开TensorBoard的方法 方式1(推荐): 在JupyterLab左侧导航创建名为“summary”的文件夹,将数据上传到“/home/ma-user/work/summary”路径。注:文件夹命名只能为summary否则无法使用。 进入“summary”文件夹,单击方式1,直接进入TensorBoard可视化界面。如图2所示。 图2 TensorBoard界面(1) 方式2: 用户可以自行升级除2.4.0之外的TensorBoard,但需注意升级后只有方式2使用新的TensorBoard,其余方式保持TensorBoard2.1.1不变。
  • 相关操作 关闭TensorBoard方式如下: 方式1:单击下图所示的,进入TensorBoard实例管理界面,该界面记录了所有启动的TensorBoard实例,单击对应实例后面的SHUT DOWN即可停止该实例。 图8 单击SHUT DOWN停该实例 方式2:在开发环境JupyterLab中的.ipynb文件窗口中输入命令,关闭 TensorBoard。PID在启动界面有提示或者通过 ps -ef | grep tensorboard 查看。 !kill PID 方式3:单击下方红框中的按钮可以关闭所有启动的TensorBoard实例。 图9 关闭所有启动的TensorBoard实例 方式4(不推荐):直接在JupyterLab中上关闭TensorBoard窗口,此方式仅关闭可视化窗口,并未关闭后台。
  • Step2 上传Summary数据 在开发环境中使用TensorBoard可视化功能,需要用到Summary数据。 Summary数据可以直接传到开发环境的这个路径下/home/ma-user/work/,也可以放到OBS并行文件系统中。 Summary数据上传到Notebook路径/home/ma-user/work/下的方式,请参见上传数据至Notebook。 Summary数据如果是通过OBS并行文件系统挂载到Notebook中,请将模型训练时产生的Summary文件先上传到OBS并行文件系统,并确保OBS并行文件系统与ModelArts在同一区域。在Notebook中启动TensorBoard时,Notebook会自动从挂载的OBS并行文件系统目录中读取Summary数据。
  • 创建训练作业 使用PyTorch预置框架功能,通过mp.spawn命令启动 启动方式选择预置框架/PyTorch,代码目录选择OBS桶的code文件夹所在路径,启动文件选择main.py文件。 图1 创建训练作业 当资源规格为单机多卡时,需要在创建训练作业时指定超参world_size和rank。若资源规格为多机时(训练作业计算节点个数大于 1)无需设置,world_size和rank超参由平台自动注入。 图2 超参 使用自定义镜像功能,通过torch.distributed.launch命令启动 启动方式选择自定义,选择镜像,代码目录选择OBS桶的code文件夹所在路径,启动命令如下: bash ${MA_JOB_DIR}/code/torchlaunch.sh 图3 创建训练作业 使用自定义镜像功能,通过torch.distributed.run命令启动 启动方式选择自定义,选择镜像,代码目录选择OBS桶的code文件夹所在路径,启动命令如下: bash ${MA_JOB_DIR}/code/torchrun.sh 图4 创建训练作业
  • 代码示例 文件目录结构如下所示,将以下文件上传至OBS桶中: code # 代码根目录 └─torch_ddp.py # PyTorch DDP训练代码文件 └─main.py # 使用PyTorch预置框架功能,通过mp.spawn命令启动训练的启动文件 └─torchlaunch.sh # 使用自定义镜像功能,通过torch.distributed.launch命令启动训练的启动文件 └─torchrun.sh # 使用自定义镜像功能,通过torch.distributed.run命令启动训练的启动文件 torch_ddp.py内容如下: import os import torch import torch.distributed as dist import torch.nn as nn import torch.optim as optim from torch.nn.parallel import DistributedDataParallel as DDP # 用于通过 mp.spawn 启动 def init_from_arg(local_rank, base_rank, world_size, init_method): rank = base_rank + local_rank dist.init_process_group("nccl", rank=rank, init_method=init_method, world_size=world_size) ddp_train(local_rank) # 用于通过 torch.distributed.launch 或 torch.distributed.run 启动 def init_from_env(): dist.init_process_group(backend='nccl', init_method='env://') local_rank=int(os.environ["LOCAL_RANK"]) ddp_train(local_rank) def cleanup(): dist.destroy_process_group() class ToyModel(nn.Module): def __init__(self): super(ToyModel, self).__init__() self.net1 = nn.Linear(10, 10) self.relu = nn.ReLU() self.net2 = nn.Linear(10, 5) def forward(self, x): return self.net2(self.relu(self.net1(x))) def ddp_train(device_id): # create model and move it to GPU with id rank model = ToyModel().to(device_id) ddp_model = DDP(model, device_ids=[device_id]) loss_fn = nn.MSELoss() optimizer = optim.SGD(ddp_model.parameters(), lr=0.001) optimizer.zero_grad() outputs = ddp_model(torch.randn(20, 10)) labels = torch.randn(20, 5).to(device_id) loss_fn(outputs, labels).backward() optimizer.step() cleanup() if __name__ == "__main__": init_from_env() main.py内容如下: import argparse import torch import torch.multiprocessing as mp parser = argparse.ArgumentParser(description='ddp demo args') parser.add_argument('--world_size', type=int, required=True) parser.add_argument('--rank', type=int, required=True) parser.add_argument('--init_method', type=str, required=True) args, unknown = parser.parse_known_args() if __name__ == "__main__": n_gpus = torch.cuda.device_count() world_size = n_gpus * args.world_size base_rank = n_gpus * args.rank # 调用 DDP 示例代码中的启动函数 from torch_ddp import init_from_arg mp.spawn(init_from_arg, args=(base_rank, world_size, args.init_method), nprocs=n_gpus, join=True) torchlaunch.sh内容如下: #!/bin/bash # 系统默认环境变量,不建议修改 MASTER_HOST="$VC_WORKER_HOSTS" MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" MASTER_PORT="6060" JOB_ID="1234" NNODES="$MA_NUM_HOSTS" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" # 自定义环境变量,指定python脚本和参数 PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py PYTHON_ARGS="" CMD="python -m torch.distributed.launch \ --nnodes=$NNODES \ --node_rank=$NODE_RANK \ --nproc_per_node=$NGPUS_PER_NODE \ --master_addr $MASTER_ADDR \ --master_port=$MASTER_PORT \ --use_env \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD torchrun.sh内容如下: PyTorch 2.1版本需要将“rdzv_backend”参数设置为“static:--rdzv_backend=static”。 #!/bin/bash # 系统默认环境变量,不建议修改 MASTER_HOST="$VC_WORKER_HOSTS" MASTER_ADDR="${VC_WORKER_HOSTS%%,*}" MASTER_PORT="6060" JOB_ID="1234" NNODES="$MA_NUM_HOSTS" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" # 自定义环境变量,指定python脚本和参数 PYTHON_SCRIPT=${MA_JOB_DIR}/code/torch_ddp.py PYTHON_ARGS="" if [[ $NODE_RANK == 0 ]]; then EXT_ARGS="--rdzv_conf=is_host=1" else EXT_ARGS="" fi CMD="python -m torch.distributed.run \ --nnodes=$NNODES \ --node_rank=$NODE_RANK \ $EXT_ARGS \ --nproc_per_node=$NGPUS_PER_NODE \ --rdzv_id=$JOB_ID \ --rdzv_backend=c10d \ --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT \ $PYTHON_SCRIPT \ $PYTHON_ARGS " echo $CMD $CMD
  • 可视化训练作业介绍 ModelArts支持在新版开发环境中开启TensorBoard和MindInsight可视化工具。在开发环境中通过小数据集训练调试算法,主要目的是验证算法收敛性、检查是否有训练过程中的问题,方便用户调测。 ModelArts可视化作业支持创建TensorBoard类型和MindInsight两种类型。 TensorBoard和MindInsight能够有效地展示训练作业在运行过程中的变化趋势以及训练中使用到的数据信息。 TensorBoard TensorBoard是一个可视化工具,能够有效地展示TensorFlow在运行过程中的计算图、各种指标随着时间的变化趋势以及训练中使用到的数据信息。TensorBoard相关概念请参考TensorBoard官网。 TensorBoard可视化训练作业,当前仅支持基于TensorFlow2.1、Pytorch1.4/1.8版本镜像,CPU/GPU规格的资源类型。请根据实际局点支持的镜像和资源规格选择使用。 MindInsight MindInsight能可视化展现出训练过程中的标量、图像、计算图以及模型超参等信息,同时提供训练看板、模型溯源、数据溯源、性能调试等功能,帮助您在更高效地训练调试模型。MindInsight当前支持基于MindSpore引擎的训练作业。MindInsight相关概念请参考MindSpore官网。 MindInsight可视化训练作业,当前支持的镜像如下,请根据实际局点支持的镜像和资源规格选择使用。 mindspore1.2.0版本,CPU/GPU规格的资源类型。 mindspore1.5.x以上版本,Ascend规格的资源类型。 您可以使用模型训练时产生的Summary文件在开发环境Notebook中创建可视化作业。 在开发环境中创建MindInsight可视化作业,请参见MindInsight可视化作业。 在开发环境中创建TensorBoard可视化作业,请参见TensorBoard可视化作业。 父主题: 模型训练可视化
共100000条