• ModelConverter(模型转换器)
    • 转换前格式(二进制)
    • 转换后格式(明文)
    • 转换器
      • 1. 单机模式
      • 2. 分布式模式

    ModelConverter(模型转换器)


    Angel任务结束时,PSModel的模型写入,会默认以二进制文件格式存储,这样可以有更好的速度和节省空间,然而有些用户必须使用文本格式的模型。为此,Angel提供了ModelConverter类,可以将模型文件从二进制转换成明文,从而让用户更方便的使用。

    转换前格式(二进制)

    转换前,Angel的二进制模型文件,默认设计如下:

    • 每个模型拥有一个源文件”meta”,保存了这个模型的参数和分区(partition)信息,以及每个分区数据的索引信息
    • 多个模型文件,每个模型文件保存了一个或者多个模型分区的数据

    转换后格式(明文)

    转换后,Angel的明文模型文件,默认设计如下

    • 模型按照分区为单位存储,一个输出文件可能包含一个或多个分区, 输出文件和partition的对应关系与原始二进制格式相同。

    • 格式如下,在每一行的起始处行号标识“rowIndex=xxx”,随后为一系列的key:value,key和value分别表示该行下的列索引和对应的值。注意一行可能被分在多个分区下,因而完整的一行可能被分成多段存储在不同的文件中

      1. ```
      2. rowIndex=0
      3. 0:-0.004235138405748639
      4. 1:-0.003367253227582031
      5. 3:-0.003988846053264014
      6. 6:0.001803243020660425
      7. 8:1.9413353447408782E-4
      8. ```

    转换器

    目前Angel支持两种不同模式的转换器:单机模式分布式模式

    1. 单机模式

    单机模式就是直接在运行脚本的机器上(一般是用来提交任务的网关机器)来执行转换任务。一般情况下, 推荐使用客户端模式,使用简单。提交命令如下:

    1. ./bin/angel-model-convert \
    2. --angel.load.model.path ${hdfs_path} \
    3. --angel.save.model.path ${hdfs_path} \
    4. --angel.modelconverts.model.names ${models} \
    5. --angel.modelconverts.serde.class ${SerdeClass}

    2. 分布式模式

    单机模式虽然简单,但是由于模型转换过程中需要消耗CPU和网络IO资源,尤其是模型非常大的情况下,所以如果网关机器资源较少,用单机模式可能影响网关机的性能,因此,我们提供了分布式模式。

    分布式模式是指启动一个Yarn模式的Angel Job,以Angel的Worker为容器来执行转换程序,借助Angel的分布式处理能力来转换模型,这样对网关机的压力很小,速度更快。提交命令如下:

    1. ./bin/angel-submit \
    2. --angel.app.submit.class com.tencent.angel.ml.toolkits.modelconverter.ModelConverterRunner \
    3. --angel.load.model.path ${hdfs_path} \
    4. --angel.save.model.path ${hdfs_path} \
    5. --angel.modelconverts.model.names ${models} \
    6. --angel.modelconverts.serde.class ${SerdeClass}

    参数说明

    • angel.load.model.path
      • 模型输入路径,即原始的二进制格式的模型保存路径(注意,这个路径不用带矩阵名)
    • angel.save.model.path
      • 转换后文本格式的模型存储路径
    • angel.modelconverts.model.names
      • 需转换的模型名称列表,可以指定多个模型名,用“,”分隔。
      • 说明:这个参数不是必须的,当不指定这个参数时,会转换指定输入路径下所有的模型
    • angel.modelconverts.serde.class
      • 模型输出行序列化格式
      • 说明:这个参数不是必须的,当不指定这个参数时,使用默认的行格式,即“index:value”形式