云服务器内容精选

  • 表达式转换 使用JSP表达式语言(Expression Language)对当前字段或整行数据进行转换。JSP表达式语言可以用来创建算术和逻辑表达式。在表达式内可以使用整型数,浮点数,字符串,常量true、false和null。 表达式支持以下两个环境变量: value:当前字段值。 row:当前行,数组类型。 表达式支持的工具类用法罗列如下,未列出即表示不支持: 如果当前字段为字符串类型,将字符串全部转换为小写,例如将“aBC”转换为“abc”。 表达式:StringUtils.lowerCase(value) 将当前字段的字符串全部转为大写。 表达式:StringUtils.upperCase(value) 如果想将第1个日期字段格式从“2018-01-05 15:15:05”转换为“20180105”。 表达式:DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd") 如果想将时间戳转换成“yyyy-MM-dd hh:mm:ss”格式的日期字符串的类型,例如字段值为“1701312046588”,转化后为“2023-11-30 10:40:46”。 表达式:DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss") 如果想将“yyyy-MM-dd hh:mm:ss”格式的日期字符串转换成时间戳的类型。 表达式:DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss")) 如果当前字段值为“yyyy-MM-dd”格式的日期字符串,需要截取年,例如字段值为“2017-12-01”,转换后为“2017”。 表达式:StringUtils.substringBefore(value,"-") 如果当前字段值为数值类型,转换后值为当前值的两倍。 表达式:value*2 如果当前字段值为“true”,转换后为“Y”,其它值则转换后为“N”。 表达式:value=="true"?"Y":"N" 如果当前字段值为字符串类型,当为空时,转换为“Default”,否则不转换。 表达式:empty value? "Default":value 如果想将日期字段格式从“2018/01/05 15:15:05”转换为“2018-01-05 15:15:05”。 表达式:DateUtils.format(DateUtils.parseDate(value,"yyyy/MM/dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss") 获取一个36位的UUID(Universally Unique Identifier,通用唯一识别码)。 表达式:CommonUtils.randomUUID() 如果当前字段值为字符串类型,将首字母转换为大写,例如将“cat”转换为“Cat”。 表达式:StringUtils.capitalize(value) 如果当前字段值为字符串类型,将首字母转换为小写,例如将“Cat”转换为“cat”。 表达式:StringUtils.uncapitalize(value) 如果当前字段值为字符串类型,使用空格填充为指定长度,并且将字符串居中,当字符串长度不小于指定长度时不转换,例如将“ab”转换为长度为4的“ab”。 表达式:StringUtils.center(value,4) 删除字符串末尾的一个换行符(包括“\n”、“\r”或者“\r\n”),例如将“abc\r\n\r\n”转换为“abc\r\n”。 表达式:StringUtils.chomp(value) 如果字符串中包含指定的字符串,则返回布尔值true,否则返回false。例如“abc”中包含“a”,则返回true。 表达式:StringUtils.contains(value,"a") 如果字符串中包含指定字符串的任一字符,则返回布尔值true,否则返回false。例如“zzabyycdxx”中包含“z”或“a”任意一个,则返回true。 表达式:StringUtils.containsAny(value,"za") 如果字符串中不包含指定的所有字符,则返回布尔值true,包含任意一个字符则返回false。例如“abz”中包含“xyz”里的任意一个字符,则返回false。 表达式:StringUtils.containsNone(value,"xyz") 如果当前字符串只包含指定字符串中的字符,则返回布尔值true,包含任意一个其它字符则返回false。例如“abab”只包含“abc”中的字符,则返回true。 表达式:StringUtils.containsOnly(value,"abc") 如果字符串为空或null,则转换为指定的字符串,否则不转换。例如将空字符转换为null。 表达式:StringUtils.defaultIfEmpty(value,null) 如果字符串以指定的后缀结尾(包括大小写),则返回布尔值true,否则返回false。例如“abcdef”后缀不为null,则返回false。 表达式:StringUtils.endsWith(value,null) 如果字符串和指定的字符串完全一样(包括大小写),则返回布尔值true,否则返回false。例如比较字符串“abc”和“ABC”,则返回false。 表达式:StringUtils.equals(value,"ABC") 从字符串中获取指定字符串的第一个索引,没有则返回整数-1。例如从“aabaabaa”中获取“ab”的第一个索引1。 表达式:StringUtils.indexOf(value,"ab") 从字符串中获取指定字符串的最后一个索引,没有则返回整数-1。例如从“aFkyk”中获取“k”的最后一个索引4。 表达式:StringUtils.lastIndexOf(value,"k") 从字符串中指定的位置往后查找,获取指定字符串的第一个索引,没有则转换为“-1”。例如“aabaabaa”中索引3的后面,第一个“b”的索引是5。 表达式:StringUtils.indexOf(value,"b",3) 从字符串获取指定字符串中任一字符的第一个索引,没有则返回整数-1。例如从“zzabyycdxx”中获取“z”或“a”的第一个索引0。 表达式:StringUtils.indexOfAny(value,"za") 如果字符串仅包含Unicode字符,返回布尔值true,否则返回false。例如“ab2c”中包含非Unicode字符,返回false。 表达式:StringUtils.isAlpha(value) 如果字符串仅包含Unicode字符或数字,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumeric(value) 如果字符串仅包含Unicode字符、数字或空格,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumericSpace(value) 如果字符串仅包含Unicode字符或空格,返回布尔值true,否则返回false。例如“ab2c”中包含Unicode字符和数字,返回false。 表达式:StringUtils.isAlphaSpace(value) 如果字符串仅包含ASCII可打印字符,返回布尔值true,否则返回false。例如“!ab-c~”返回true。 表达式:StringUtils.isAsciiPrintable(value) 如果字符串为空或null,返回布尔值true,否则返回false。 表达式:StringUtils.isEmpty(value) 如果字符串中仅包含Unicode数字,返回布尔值true,否则返回false。 表达式:StringUtils.isNumeric(value) 获取字符串最左端的指定长度的字符,例如获取“abc”最左端的2位字符“ab”。 表达式:StringUtils.left(value,2) 获取字符串最右端的指定长度的字符,例如获取“abc”最右端的2位字符“bc”。 表达式:StringUtils.right(value,2) 将指定字符串拼接至当前字符串的左侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”左侧,拼接后长度为8,则转换后为“yzyzybat”。 表达式:StringUtils.leftPad(value,8,"yz") 将指定字符串拼接至当前字符串的右侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”右侧,拼接后长度为8,则转换后为“batyzyzy”。 表达式:StringUtils.rightPad(value,8,"yz") 如果当前字段为字符串类型,获取当前字符串的长度,如果该字符串为null,则返回0。 表达式:StringUtils.length(value) 如果当前字段为字符串类型,删除其中所有的指定字符串,例如从“queued”中删除“ue”,转换后为“qd”。 表达式:StringUtils.remove(value,"ue") 如果当前字段为字符串类型,移除当前字段末尾指定的子字符串。指定的子字符串若不在当前字段的末尾,则不转换,例如移除当前字段“www.domain.com”后的“.com”。 表达式:StringUtils.removeEnd(value,".com") 如果当前字段为字符串类型,移除当前字段开头指定的子字符串。指定的子字符串若不在当前字段的开头,则不转换,例如移除当前字段“www.domain.com”前的“www.”。 表达式:StringUtils.removeStart(value,"www.") 如果当前字段为字符串类型,替换当前字段中所有的指定字符串,例如将“aba”中的“a”用“z”替换,转换后为“zbz”。 表达式:StringUtils.replace(value,"a","z") 如果当前字段为字符串类型,一次替换字符串中的多个字符,例如将字符串“hello”中的“h”用“j”替换,“o”用“y”替换,转换后为“jelly”。 表达式:StringUtils.replaceChars(value,"ho","jy") 如果字符串以指定的前缀开头(区分大小写),则返回布尔值true,否则返回false,例如当前字符串“abcdef”以“abc”开头,则返回true。 表达式:StringUtils.startsWith(value,"abc") 如果当前字段为字符串类型,去除字段中首、尾处所有指定的字符,例如去除“abcyx”中首尾所有的“x”、“y”、“z”和“b”,转换后为“abc”。 表达式:StringUtils.strip(value,"xyzb") 如果当前字段为字符串类型,去除字段末尾所有指定的字符,例如去除当前字段末尾的"abc"字符串。 表达式:StringUtils.stripEnd(value,"abc") 如果当前字段为字符串类型,去除字段开头所有指定的字符,例如去除当前字段开头的所有空格。 表达式:StringUtils.stripStart(value,null) 如果当前字段为字符串类型,获取字符串指定位置后(索引从0开始,包括指定位置的字符)的子字符串,指定位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”第2个字符(即c)及之后的字符串,则转换后为“cde”。 表达式:StringUtils.substring(value,2) 如果当前字段为字符串类型,获取字符串指定区间(索引从0开始,区间起点包括指定位置的字符,区间终点不包含指定位置的字符)的子字符串,区间位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”第2个字符(即c)及之后、第4个字符(即e)之前的字符串,则转换后为“cd”。 表达式:StringUtils.substring(value,2,4) 如果当前字段为字符串类型,获取当前字段里第一个指定字符后的子字符串。例如获取“abcba”中第一个“b”之后的子字符串,转换后为“cba”。 表达式:StringUtils.substringAfter(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符后的子字符串。例如获取“abcba”中最后一个“b”之后的子字符串,转换后为“a”。 表达式:StringUtils.substringAfterLast(value,"b") 如果当前字段为字符串类型,获取当前字段里第一个指定字符前的子字符串。例如获取“abcba”中第一个“b”之前的子字符串,转换后为“a”。 表达式:StringUtils.substringBefore(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符前的子字符串。例如获取“abcba”中最后一个“b”之前的子字符串,转换后为“abc”。 表达式:StringUtils.substringBeforeLast(value,"b") 如果当前字段为字符串类型,获取嵌套在指定字符串之间的子字符串,没有匹配的则返回null。例如获取“tagabctag”中“tag”之间的子字符串,转换后为“abc”。 表达式:StringUtils.substringBetween(value,"tag") 如果当前字段为字符串类型,删除当前字符串两端的控制字符(char≤32),例如删除字符串前后的空格。 表达式:StringUtils.trim(value) 将当前字符串转换为字节,如果转换失败,则返回0。 表达式:NumberUtils.toByte(value) 将当前字符串转换为字节,如果转换失败,则返回指定值,例如指定值配置为1。 表达式:NumberUtils.toByte(value,1) 将当前字符串转换为Double数值,如果转换失败,则返回0.0d。 表达式:NumberUtils.toDouble(value) 将当前字符串转换为Double数值,如果转换失败,则返回指定值,例如指定值配置为1.1d。 表达式:NumberUtils.toDouble(value,1.1d) 将当前字符串转换为Float数值,如果转换失败,则返回0.0f。 表达式:NumberUtils.toFloat(value) 将当前字符串转换为Float数值,如果转换失败,则返回指定值,例如配置指定值为1.1f。 表达式:NumberUtils.toFloat(value,1.1f) 将当前字符串转换为Int数值,如果转换失败,则返回0。 表达式:NumberUtils.toInt(value) 将当前字符串转换为Int数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toInt(value,1) 将字符串转换为Long数值,如果转换失败,则返回0。 表达式:NumberUtils.toLong(value) 将当前字符串转换为Long数值,如果转换失败,则返回指定值,例如配置指定值为1L。 表达式:NumberUtils.toLong(value,1L) 将字符串转换为Short数值,如果转换失败,则返回0。 表达式:NumberUtils.toShort(value) 将当前字符串转换为Short数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toShort(value,1) 将当前IP字符串转换为Long数值,例如将“10.78.124.0”转换为LONG数值是“172915712”。 表达式:CommonUtils.ipToLong(value) 从网络读取一个IP与物理地址映射文件,并存放到Map集合,这里的URL是IP与地址映射文件存放地址,例如“http://10.114.205.45:21203/sqoop/IpList.csv”。 表达式:HttpsUtils.downloadMap("url") 将IP与地址映射对象缓存起来并指定一个key值用于检索,例如“ipList”。 表达式:CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url")) 取出缓存的IP与地址映射对象。 表达式:CommonUtils.getCache("ipList") 判断是否有IP与地址映射缓存。 表达式:CommonUtils.cacheExists("ipList") 根据IP取出对应的详细地址:国家_省份_城市_运营商,例如“1xx.78.124.0”对应的地址为“中国_广东_深圳_电信”,取不到对应地址则默认“**_**_**_**”。如果需要,可通过StringUtil类表达式对地址进行进一步拆分。 表达式:CommonUtils.getMapValue(CommonUtils.ipToLong(value),CommonUtils.cacheExists("ipLis")?CommonUtils.getCache("ipLis"):CommonUtils.setCache("ipLis",HttpsUtils.downloadMap("url"))) 根据指定的偏移类型(month/day/hour/minute/second)及偏移量(正数表示增加,负数表示减少),将指定格式的时间转换为一个新时间,例如将“2019-05-21 12:00:00”增加8个小时。 表达式:DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "hour", 8) 如果value值为空或者null时,则返回字符串"aaa",否则返回value。 表达式:StringUtils.defaultIfEmpty(value,"aaa")
  • 约束限制 作业源端开启“使用SQL语句”参数时不支持配置转换器。 如果在字段映射界面,通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时, CDM 有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。 关系数据库、Hive、 MRS Hudi及 DLI 做源端时,不支持获取样值功能。 SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。 当作业源端为OBS、迁移 CS V文件时,并且配置“解析首行为列名”参数的场景下显示列名。 当使用二进制格式进行文件到文件的迁移时,没有配置字段转换器这一步。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,会将字段值直接写入目的端。 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。 创建表达式转换器时,表达式的功能是对该字段的数据进行处理,故不建议使用时间宏,如需使用,请根据以下场景处理(源端是文件类的配置时仅支持方式一): 方式一:新建表达式转换器时,表达式需要用''包围。 ${dateformat(yyyy-MM-dd)}不加引号使用时,解析成2017-10-16之后还会进行运算,将'-'识别为减号,导致结果为1991,须使用'${dateformat(yyyy-MM-dd)}',即'2017-10-16'。 方式二:源字段中新增自定义字段,在样值中填写时间宏变量,重新进行字段映射处理。 如果是导入到 数据仓库 服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列: 有主键可以使用主键作为分布列。 多个数据段联合做主键的场景,建议设置所有主键作为分布列。 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。
  • 引用字符和转义字符使用示例 引用字符和转义字符使用说明: 引用字符:用于识别分割字段,默认值:英文双引号(")。 转义字符:在导出结果中如果需要包含特殊字符,如引号本身,可以使用转义字符(反斜杠 \ )来表示。默认值:英文反斜杠(\)。 假设两个quote_char之间的数据内容存在第三个quote_char,则在第三个quote_char前加上escape_char,从而避免字段内容被分割。 假设数据内容中原本就存在escape_char,则在这个原有的escape_char前再加一个escape_char,避免原来的那个字符起到转义作用。 应用示例: 在进行转储时,如果引用字符和转义字符不填,如下图所示。 下载的.csv用excel打开以后如下图所示,是分成两行的。 在转储时,如果引用字符和转义字符都填写,比如,引用字符和转义字符都填英文双引号("),则下载以后查看结果如下图所示。
  • 下载或转储脚本执行结果 脚本运行成功后,支持下载和转储SQL脚本执行结果。系统默认支持所有用户都能下载和转储SQL脚本的执行结果。如果您不希望所有用户都有该操作权限,可参考配置数据导出策略进行配置。 脚本执行完成后在“执行结果”中,单击“下载”可以直接下载CSV格式的结果文件到本地。可以在下载中心查看下载记录。 脚本执行完成后在“执行结果”中,单击“转储”可以将脚本执行结果转储为CSV和JSON格式的结果文件到OBS中,详情请参见表3。 转储功能依赖于OBS服务,如无OBS服务,则不支持该功能。 当前仅支持转储SQL脚本查询(query)类语句的结果。 DataArts Studio 的下载或转储的SQL结果中,如果存在英文逗号、换行符等这种特殊符号,可能会导致数据错乱、行数变多等的问题。 表3 转储配置 参数 是否必选 说明 数据格式 是 目前支持导出CSV和JSON格式的结果文件。 资源队列 否 选择执行导出操作的DLI队列。当脚本为DLI SQL时,配置该参数。 压缩格式 否 选择压缩格式。当脚本为DLI SQL时,配置该参数。 none bzip2 deflate gzip 存储路径 是 设置结果文件的OBS存储路径。选择OBS路径后,您需要在选择的路径后方自定义一个文件夹名称,系统将在OBS路径下创建文件夹,用于存放结果文件。 您也可以到下载中心配置默认的OBS路径地址,配置好后在转储时会默认填写。 覆盖类型 否 如果“存储路径”中,您自定义的文件夹在OBS路径中已存在,选择覆盖类型。当脚本为DLI SQL时,配置该参数。 覆盖:删除OBS路径中已有的重名文件夹,重新创建自定义的文件夹。 存在即报错:系统返回错误信息,退出导出操作。 是否导出列名 否 是:导出列名 否:不导出列名 字符集 否 UTF-8:默认字符集。 GB2312:当导出数据中包含中文字符集时,推荐使用此字符集。 GBK:国家标准GB2312基础上扩容后兼容GB2312的标准。 引用字符 否 仅在数据格式为csv格式时支持配置引用字符。 引用字符在导出作业结果时用于标识文本字段的开始和结束,即用于分割字段。 仅支持设置一个字符。默认值是英文双引号(")。 主要用于处理包含空格、特殊字符或与分隔符相同字符的数据。 关于“引用字符”和“转义字符”的使用示例请参考引用字符和转义字符使用示例。 转义字符 否 仅在数据格式为csv格式时支持配置转义字符。 在导出结果中如果需要包含特殊字符,如引号本身,可以使用转义字符(反斜杠 \ )来表示。 仅支持设置一个字符。默认值是英文反斜杠(\)。 常用转义字符的场景: 假设两个引用字符之间的数据内容存在第三个引用字符,则在第三个引用字符前加上转义字符,从而避免字段内容被分割。 假设数据内容中原本就存在转义字符,则在这个原有的转义字符前再加一个转义字符,避免原来的那个字符起到转义作用。 关于“引用字符”和“转义字符”的使用示例请参考引用字符和转义字符使用示例。 相对于直接查看SQL脚本的执行结果,通过下载和转储能够支持获取更多的执行结果。各类SQL脚本查看、下载、转储支持的规格如表4所示。 表4 SQL脚本支持查看/下载/转储规格 SQL类型 在线查看最大结果条数 下载最大结果 转储最大结果 DLI 10000 1000条且少于3MB 无限制 Hive 1000 1000条且少于3MB 10000条或3MB DWS 1000 1000条且少于3MB 10000条或3MB Spark 1000 1000条且少于3MB 10000条或3MB RDS 1000 1000条且少于3MB 不支持 Presto 1000 下载结果直接转储至OBS,条数无限制。 无限制 ClickHouse 1000 1000条且少于3MB 10000条或3MB HetuEngine 1000 1000条且少于3MB 10000条或3MB Impala 1000 1000条且少于3MB 10000条或3MB Doris 1000 1000条且少于3MB 1000条或3MB
  • 场景描述 ranktable路由规划是一种用于分布式并行训练中的通信优化能力,在使用NPU的场景下,支持对节点之间的通信路径根据交换机实际topo做网络路由亲和规划,进而提升节点之间的通信速度。 本案例介绍如何在ModelArts Lite场景下使用ranktable路由规划完成Pytorch NPU分布式训练任务,训练任务默认使用Volcano job形式下发到Lite资源池集群。 图1 任务示意图
  • 约束与限制 该功能只支持贵阳一区域,如果要在其他区域使用请联系技术支持。 ModelArts Lite资源池对应的CCE集群需要安装1.10.12及以上版本的华为云版Volcano插件。Volcano调度器的安装升级请参见Volcano调度器。仅华为云版Volcano插件支持开启路由加速特性。 训练使用的Python版本是3.7或3.9,否则无法实现ranktable路由加速。 训练作业的任务节点数要大于或等于3,否则会跳过ranktable路由加速。建议在大模型场景(512卡及以上)使用ranktable路由加速。 脚本执行目录不能是共享目录,否则ranktable路由加速会失败。 路由加速的原理是改变rank编号,所以代码中对rank的使用要统一,如果rank的使用不一致会导致训练异常。
  • Lite Cluster使用流程 ModelArts Lite Cluster面向k8s资源型用户,提供托管式k8s集群,并预装主流AI开发插件以及自研的加速插件,以云原生方式直接向用户提供AI Native的资源、任务等能力,用户可以直接操作资源池中的节点和k8s集群。本文旨在帮助您了解Lite Cluster的基本使用流程,帮助您快速上手。 图1 资源池架构图 如图所示为Lite Cluster架构图。Lite Cluster基于CCE服务实现对资源节点的管理,因此,用户首先需要购买一个CCE集群。在ModelArts控制台购买Lite Cluster集群时,ModelArts的资源池会先纳管这个CCE集群,然后根据用户设置的规格创建相应的计算节点(BMS/ECS)。随后,CCE会对这些节点进行纳管,并且ModelArts会在CCE集群中安装npuDriver、os-node-agent等插件。完成Cluster资源池的购买后,您即可对资源进行配置,并将数据上传至存储云服务中。当您需要使用集群资源时,可以使用kubectl工具或k8s API来下发作业。此外,ModelArts还提供了扩缩容、驱动升级等功能,方便您对集群资源进行管理。 图2 使用流程 推荐您根据以下使用流程对Lite Cluster进行使用。 资源开通:您需要开通资源后才可使用Lite Cluster,在开通资源前,请确保完成所有相关准备工作,包括申请开通所需的规格和进行权限配置。随后,在ModelArts控制台上购买Lite Cluster资源。请参考Lite Cluster资源开通。 资源配置:完成资源购买后,需要对网络、存储、驱动进行相关配置。请参考Lite Cluster资源配置。 资源使用:完成资源配置后,您可以使用集群资源运行训练和推理训练,具体案例可参考Lite Cluster资源使用。 资源管理:Lite Cluster提供扩缩容、驱动升级等管理手段,您可在ModelArts控制台上对资源进行管理。请参考Lite Cluster资源管理。 表1 相关名词解释 名词 含义 容器 容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源。尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知。Docker是第一个使容器能在不同机器之间移植的系统。它不仅简化了打包应用的流程,也简化了打包应用的库和依赖,甚至整个操作系统的文件系统能被打包成一个简单的可移植的包,这个包可以被用来在任何其他运行Docker的机器上使用。 Kubernetes Kubernetes是一个开源的容器编排部署管理平台,用于管理云平台中多个主机上的容器化应用。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。使用Lite Cluster需要用户具备一定的Kubernetes知识背景,您可参考Kubernetes基础知识。 CCE 云容器引擎(Cloud Container Engine,简称CCE)是一个企业级的Kubernetes集群托管服务,支持容器化应用的全生命周期管理,为您提供高度可扩展的、高性能的云原生应用部署和管理方案。CCE官网文档可参考云容器引擎。 BMS 裸金属服务器(Bare Metal Server)是一款兼具虚拟机弹性和物理机性能的计算类服务,为您和您的企业提供专属的云上物理服务器,为核心数据库、关键应用系统、高性能计算、大数据等业务提供卓越的计算性能以及数据安全。 ECS 弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。 os-node-agent ModelArts Lite k8s Cluster节点默认会安装os-node-agent插件,用于对节点进行管理,例如: 驱动升级:通过os-node-agent插件下载驱动文件并进行驱动版本升级、回退。 故障检测:通过os-node-agent插件在系统内周期性巡检故障特征,及时发现节点故障。 指标采集:通过os-node-agent插件采集GPU/NPU利用率指标等重要的观测数据,上报到租户侧 AOM 。 节点运维:授权后,通过os-node-agent插件执行诊断脚本,进行故障定位定界。 父主题: Lite Cluster使用前必读
  • Lite Cluster资源管理介绍 在ModelArts控制台,您可以对已创建的资源进行管理。通过单击资源池名称,可以进入到资源池详情页,您可以在详情页进行下述操作。 管理Lite Cluster节点:节点是容器集群组成的基本元素,您可以对资源池内单节点进行替换、删除、重置等操作。 管理Lite Cluster节点池:为帮助您更好地管理Kubernetes集群内的节点,ModelArts支持通过节点池来管理节点。节点池是集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点,您可以创建、更新和删除节点池。 管理Lite Cluster资源池标签:ModelArts支持为资源池添加标签,用来标识云资源,方便您快速搜索到资源池。 扩缩容Lite Cluster资源池:当Cluster资源池创建完成,使用一段时间后,由于用户AI开发业务的变化,对于资源池资源量的需求可能会产生变化,面对这种场景,ModelArts提供了扩缩容功能,用户可以根据自己的需求动态调整。 升级Lite Cluster资源池驱动:当资源池中的节点含有GPU/Ascend资源时,用户基于自己的业务,可能会有自定义GPU/Ascend驱动的需求,ModelArts面向此类客户提供了自助升级专属资源池GPU/Ascend驱动的能力。 监控Lite Cluster资源:ModelArts支持使用AOM和Prometheus对资源进行监控,方便您了解当前的资源使用情况。 释放Lite Cluster资源:针对不再使用的Lite Cluster资源,您可以释放资源。 图1 Lite Cluster资源管理介绍 父主题: Lite Cluster资源管理
  • 插件版本与CCE集群版本适配关系 表3 插件版本与CCE集群版本适配关系 类别 插件名称 插件版本 适配CCE集群版本 适用范围、约束 插件功能描述 ccePlugin gpu-beta 2.0.48(推荐) v1.(23|25).* GPU 支持在容器中使用GPU显卡的设备管理插件。 1.2.15 v1.23.* huawei-npu 2.1.5(推荐) v1.(23|25).* NPU 支持容器里使用huawei NPU设备的管理插件。 volcano 1.11.9(推荐) v1.(23|25).* NPU 基于Kubernetes的批处理平台。 npuDriver npu-driver 7.1.0.7.220-23.0.5(推荐) 7.1.0.5.220-23.0.3 无约束 NPU 用于升级、回滚npu驱动。 helm rdma-sriov-dev-plugin 0.1.0 无约束 BMS、RDMA且非ascend-1980 用于支持容器里使用RDMA网卡。 memarts 3.23.6-r002 无约束 无约束 近计算侧分布式缓存插件,用于存储加速。 os-node-agent 6.5.0-20240529142433 无约束 无约束 OS插件,用于故障检测。 icAgent icagent default CCE默认安装当前适配版本 无约束 CCE基础组件,用于日志和监控。 gpuDriver gpu-driver 515.65.01(推荐) 510.47.03 470.182.03 470.57.02 gpu-driver与系统内核版本有关,请见表4。 用于升级、回滚gpu驱动,插件依赖gpu-beta版本。
  • 系统内核与gpu-driver配套关系 表4 系统内核与gpu-driver配套关系 镜像版本 系统内核版本 适配CCE gpu-driver版本 EulerOS 2.10 4.18.0-147.5.2.15.h1109.eulerosv2r10.x86_64 v1.(23|25|27|28).* 容器隧道网络|VPC|ENI 470.57.02 4.18.0-147.5.2.5.h805.eulerosv2r10.x86_64 v1.(23|25|27).* 容器隧道网络|VPC|ENI 470.57.02 EulerOS 2.9 4.18.0-147.5.1.6.h841.eulerosv2r9.x86_64 v1.(23|25|27|28).* 容器隧道网络|VPC 470.57.02 EulerOS 2.3 3.10.0-514.44.5.10.h193.x86_64 v1.(23|25).* 容器隧道网络|VPC 470.57.02 3.10.0-514.44.5.10.h254.x86_64 v1.(23|25).* 容器隧道网络|VPC 470.57.02
  • 裸金属服务器的对应的软件配套版本 表1 裸金属服务器 类型 卡类型 RDMA网络协议 操作系统 适用范围、约束 依赖插件 NPU ascend-snt9b RoCE 操作系统:EulerOS 2.10 64bit(推荐) 内核版本:4.19.90-vhulk2211.3.0.h1543.eulerosv2r10.aarch64 架构类型:aarch64 集群类型:CCE Standard 集群版本:v1.23(v1.23.5-r0及以上版本)|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs huawei-npu npu-driver volcano 插件版本匹配关系请见表3。 RoCE 操作系统:Huawei Cloud EulerOS 2.0 64bit 内核版本:5.10.0-60.18.0.50.r865_35.hce2.aarch64 架构类型:aarch64 集群类型: CCE Turbo 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:ENI 集群转发模式:iptables|ipvs ascend-snt9 RoCE 操作系统:EulerOS 2.8 64bit 内核版本:4.19.36-vhulk1907.1.0.h619.eulerosv2r8.aarch64 架构类型:aarch64 集群类型:CCE Standard|Turbo 集群版本:v1.23(v1.23.5-r0及以上版本)|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC|ENI 集群转发模式:iptables|ipvs GPU gp-ant8 RoCE 操作系统:EulerOS 2.10 64bit 内核版本:4.18.0-147.5.2.15.h1109.eulerosv2r10.x86_64 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 分布式训练时仅支持容器隧道网络 集群转发模式:iptables|ipvs gpu-beta gpu-driver rdma-sriov-dev-plugin 插件版本匹配关系请见表3。 gp-ant1 RoCE 操作系统:EulerOS 2.10 64bit 4.18.0-147.5.2.15.h1109.eulerosv2r10.x86_64 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 分布式训练时仅支持容器隧道网络 集群转发模式:iptables|ipvs gp-vnt1 RoCE|IB 操作系统:EulerOS 2.9 64bit(仅上海一p6|p6s规格使用) 内核版本:147.5.1.6.h1099.eulerosv2r9.x86_64 架构类型:x86 集群类型:CCE Standard| 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 分布式训练时仅支持容器隧道网络 集群转发模式:iptables|ipvs 操作系统:EulerOS 2.9 64bit(推荐) 内核版本:4.18.0-147.5.1.6.h841.eulerosv2r9.x86_64 架构类型:x86 RDMA:Remote Direct Memory Access(RDMA)是一种直接内存访问技术,将数据直接从一台计算机的内存传输到另一台计算机。 RoCE:RDMA over Converged Ethernet(RoCE)是一种网络协议,允许应用通过以太网实现远程内存访问。 IB:InfiniBand (IB) 是一种高性能计算机网络通信协议,专为高性能计算和数据中心互连设计。
  • 弹性云服务器的对应的软件配套版本 表2 弹性云服务器 类型 卡类型 操作系统 适用范围 依赖插件 NPU ascend-snt3p-300i 操作系统:EulerOS 2.9 架构类型:x86 集群类型:CCE Standard、CCE Turbo 集群版本:v1.23(v1.23.5-r0及以上版本)|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC|ENI 集群转发模式:iptables|ipvs huawei-npu npu-driver volcano 插件版本匹配关系请见表3。 ascend-snt3 操作系统:EulerOS 2.5 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs 操作系统:EulerOS 2.8 架构类型:arm 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs GPU gp-vnt1 操作系统:EulerOS 2.9 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs gpu-beta gpu-driver rdma-sriov-dev-plugin 插件版本匹配关系请见表3。 gp-ant03 操作系统:EulerOS 2.9 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs gp-ant1-pcie40 操作系统:EulerOS 2.9 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs gp-tnt004 操作系统:EulerOS 2.9 架构类型:x86 集群类型:CCE Standard 集群版本:v1.23|v1.25(推荐) 集群规模:50|200|1000|2000 集群网络模式:容器隧道网络|VPC 集群转发模式:iptables|ipvs
  • 配置流程 图1 Lite Cluster资源配置流程图 表1 Cluster资源配置流程 配置顺序 配置任务 场景说明 1 配置Lite Cluster网络 购买资源池后,需要弹性公网IP并进行网络配置,配置网络后可通过公网访问集群资源。 2 配置kubectl工具 kubectl是Kubernetes集群的命令行工具,配置kubectl后,您可通过kubectl命令操作Kubernetes集群。 3 配置Lite Cluster存储 如果没有挂载任何外部存储,此时可用存储空间根据dockerBaseSize的配置来决定,可访问的存储空间比较小,因此建议通过挂载外部存储空间解决存储空间受限问题。容器中挂载存储有多种方式,不同的场景下推荐的存储方式不一样,您可根据业务实际情进行选择。 4 (可选)配置驱动 当专属资源池中的节点含有GPU/Ascend资源时,为确保GPU/Ascend资源能够正常使用,需要配置好对应的驱动。如果在购买资源池时,没配置自定义驱动,默认驱动不满足业务要求,可通过本章节将驱动升级到指定版本。 5 (可选)配置镜像预热 Lite Cluster资源池支持镜像预热功能,镜像预热可实现将镜像提前在资源池节点上拉取好,在推理及大规模分布式训练时有效缩短镜像拉取时间。
  • Step3 在ModelArts上创建委托授权 新建委托 第一次使用ModelArts时需要创建委托授权,授权允许ModelArts代表用户去访问其他云服务。使用ModelArts Lite的资源池需要授权允许ModelArts代表用户访问云容器引擎服务CCE、裸金属服务BMS、 镜像服务 IMS和密钥管理服务DEW。 进入到ModelArts控制台的“全局配置”页面,单击“添加授权”,根据提示进行操作。 图4 添加授权 更新委托 如果之前给ModelArts创过委托授权,此处可以更新授权。 进入到ModelArts控制台的“专属资源池”页面,查看是否存在授权缺失的提示。 如果有授权缺失,根据提示,单击“此处”更新委托。根据提示选择“追加至已有授权”,单击“确定”,系统会提示权限更新成功。
  • Step5 购买CCE集群 购买Cluster资源池时,需要选择CCE集群,若您没有可用的CCE集群,可参考购买Standard/Turbo集群进行购买,集群配套版本请参考不同机型的对应的软件配套版本。 创建Cluster资源池时,请确保CCE集群为“运行中”状态。 当前仅支持CCE集群1.23&1.25&1.28版本。 若您没有可用的CCE集群,可先创建CCE集群。CCE 1.28集群版本支持通过控制台、API方式创建,CCE 1.23和CCE 1.25版本支持通过API方式创建。不同版本的CCE集群创建方式请见Kubernetes版本策略。 若您已有CCE集群,但CCE集群版本低于1.23,则可参考升级集群的流程和方法,建议将集群升级至1.28版本。