中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

使用Hyper IO库

Hyper IO库是一类提供系统软件和应用软件之间连接的软件,提供科学数据的存储描述格式定义和文件操作,在HPC应用以及大量后处理、可视化及分析框架中广泛应用,同时考虑兼容其他应用,提供文件格式转换能力。

前提条件

已安装Hyper IO库,已安装应用运行所需第三方库(如MPI、PnetCDF、NetCDF、HDF5)。

使用Hyper IO库时不支持同时叠加Hyper IO中的AdhocFS或IO转发特性。

映射关系

表1 加速库和JSON配置文件的映射关系

应用名称

加速库

JSON配置文件

WRF

libock_shore_pnetcdf.so

wrf.json

NEMO

libock_shore_netcdf.so

nemo.json

Grapes

libock_shore_mpiio.so

grapes.json

LAMMPS

libock_shore_hdf5.so/libock_shore_pnetcdf.so

lammps.json

QE

libock_shore_hdf5.so

qe.json

操作步骤

  1. 使用PuTTY工具,以普通用户登录作业执行节点。
  2. 执行以下命令,设置JSON配置文件环境变量。

    export OCK_IO_CONFIG=/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/conf/xxx.json

    以Grapes为例,执行命令为export OCK_IO_CONFIG=/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/conf/grapes.json

    JSON配置文件属主为当前用户,且要有读权限。

  3. (可选)如果想获得应用最优性能提升,请修改JSON配置文件。
    • 已提供各自应用不同的JSON样例文件,运行不同的应用使用对应的JSON文件即可,可以根据实际需求修改JSON文件。
    • 配置文件中的配置项应避免重复配置,若重复配置则以第一次配置为准。如配置"LOG_FLOW" : "ON" ,"LOG_FLOW" : "OFF",则生效的为ON。
    • 用户需要修改样例文件,需要将样例文件的内容复制,新建一个JSON文件并拷贝复制内容,再执行以下命令,按需修改该JSON文件。
    1. 执行以下命令,拷贝并配置JSON文件。

      cp /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/conf/xxx.json /userpath/to/xxx.json

      vi /userpath/to/xxx.json

    2. “i”进入编辑模式,根据实际情况修改配置文件,参数说明如表2表3表4所示。
      • (可选)需要配置数据集整体信息。
        表2 数据集整体信息(DATASET)

        名称

        描述

        类型

        缺省值

        数据集整体通用信息(GENERAL)

        LOG_FLOW

        打印FlOW模块日志。

        String

        • ON:开启
        • OFF:关闭

        OFF

        LOG_PROCESSOR

        打印PROCESSOR模块日志。

        String

        • ON:开启
        • OFF:关闭

        OFF

        LOG_BRIDGE

        打印BRIDGE模块日志。

        String

        • ON:开启
        • OFF:关闭

        OFF

        LOG_INTERCEPTOR

        打印所有INTERCEPTOR模块日志。

        String

        • ON:开启
        • OFF:关闭

        OFF

        LOG_CONFIG

        打印CONFIG模块日志。

        String

        • ON:开启
        • OFF:关闭

        OFF

        TRANSCACHESIZE

        数据总量达到Cache聚合成一次写。取值范围为[0,128],单位MB,缺省值为0,表示不聚合。

        Integer

        0

        COMPRESSMETHOD

        数据压缩方法。

        取值范围为[1,2],缺省值为1。

        Integer

        • 1:表示压缩算法为LZ4
        • 2:表示压缩算法为Bzip2

        1

        COMPRESSLEVEL

        数据压缩级别。

        取值范围为[0,5],缺省值为0,表示不压缩。

        数据压缩级别越高,数据压缩比越高。

        Integer

        0

        WITHOUTGROUP

        不配置group信息接入Hyper IO库

        String

        • ON:开启
        • OFF:关闭

        OFF

        数据集访问模式信息(DATA_ACCESS_PATTERN)

        FIXED

        应用中所有Entity的写操作在每个step间是否保持不变。

        Boolean

        • false
        • true

        false

        RANDOM

        应对粒子型应用中不要求保证粒子顺序的场景。

        Boolean

        • false
        • true

        false

        WRITE_AGGREGATE_STEPS

        元数据多少个step聚合成一次写,避免IO出现频率高且数据量小的情况。

        取值范围为[1,64]。

        Integer

        1

        WRITE_AGGREGATE_RANKS

        元数据多少个rank聚合成一个写。

        取值范围为[1,64]。

        Integer

        1

      • (可选)如果需要使用文件聚合功能,需要配置数据集整体组信息。
        表3 数据集整体组信息(GROUPS)

        名称

        描述

        类型

        缺省值

        GROUPNAME

        必填。聚合模式下聚合后文件名称,需要设置为可以匹配FILEWHITELIST正则的字符串。

        String,最大长度64

        -

        FILEWHITELIST

        可选。将符合该正则表达式的文件聚合为上述GROUPNAME文件。

        String,最大长度64

        -

      • (可选)如果需要设置单个文件内容可乱序输出,需要配置数据集个体信息。
        表4 数据集个体信息(ENTITIES)

        名称

        描述

        类型

        缺省值

        NAME

        必填。路径表示的数据项名称。

        String,最大长度64

        -

        SHUFFLE

        可选。应对粒子型应用中不要求保证粒子顺序的场景。

        Boolean

        • false
        • true

        不区分大小写。

        false

      • 包含全量配置项的配置文件样例如下所示,可根据实际需要配置所需配置项的最小集即可。
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        {
            "DATASET":
            {
                "GENERAL": {
                    "LOG_FLOW" : "OFF",
                    "LOG_PROCESSOR": "OFF",
                    "LOG_BRIDGE" : "OFF",
                    "LOG_INTERCEPTOR" : "OFF",
                    "LOG_CONFIG" : "OFF",
                    "TRANSCACHESIZE" : 0,
                    "COMPRESSMETHOD" : 1,
                    "COMPRESSLEVEL" : 0,
                    "WITHOUTGROUP" : OFF,
                    "DATA_ACCESS_PATTERN": {
                        "FIXED": "false",
                        "RANDOM": false,
                        "WRITE_AGGREGATE_STEPS": 1,
                        "WRITE_AGGREGATE_RANKS": 1
                    }
                },
                "GROUPS":
                [
                    {
                        "GROUPNAME": "xxxxx",
                        "FILEWHITELIST" : "xxxxx",
                        "ENTITIES":
                        [
                            {
                                "NAME": "xxxxx",
                                "SHUFFLE": false
                            }
                        ]
                    }
                ]
            }
        }
        
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 重新设置JSON配置文件环境变量。

      export OCK_IO_CONFIG=/userpath/to/xxx.json

  4. 运行应用程序,使能IO能力。通过LD_PRELOAD环境变量运行应用定向到Hyper IO库,应用运行完成之后会生成以shore和format结尾的目录和与原生文件同名的文件。
    • 以shore结尾的目录用于存储数据信息。
    • 以format结尾的目录用于存储描述数据的结构信息。
    • 同名文件用于存储中间件配置文件信息。

    以Grapes为例,执行命令为mpirun -N 80 -x LD_PRELOAD=/opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/lib/libock_shore_mpiio.so -x OMP_NUM_THREADS=1 -mca pml ucx -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -x UCX_NET_DEVICES=mlx5_0:1 -x UCX_WARN_UNUSED_ENV_VARS=0 ./grapes_global.exe,执行完成后生成以shore结尾的目录和与原生文件同名的文件。

    • /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64:表示Hyper IO库的安装目录。
    • 每个HPC应用只能设置一个加速库环境变量。
  5. (可选)使用Hyper IO库格式转换功能。
    • 使用Hyper IO库格式转换功能前需确保系统环境中已安装开源MPI-IO,否则会导致功能运行异常。
    • 使用Hyper IO库格式转换功能时转换的目标路径和转换结果输出路径不能相同。
    • 转换失败会输出日志在屏幕上,需手动删除生成文件。
    • 设置多个线程运行时需要在mpirun命令中添加-map-by ppr: m:node:pe=n 参数进行资源映射,m表示每个节点运行的进程数,n表示每个进程可用的CPU核数。
    • 应用推荐配置:
      • bcc-esm应用使用netcdf中间件库的情况下,转换工具不需要使用-t与-d参数。
      • wrf应用使用pnetcdf中间件库的情况下,转换工具需要使用-t8与-d参数。
    Hyper IO库格式转换功能使用方式如下:
    • 单节点转换:

      /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/bin/ock_shore_convertor [--format <目标转换格式(当前仅支持netcdf)>] [-t <1~8>(设置线程数) ] [-d (无参数,设置是否开启数据集压缩,默认不开启)] 共享存储目录输入shore文件或文件所在目录 目标格式文件输出目录

    • 多节点多进程转换 :

      mpirun -hostfile $HOSTFILE -np 进程数 /opt/IO_Middleware/IO_Middleware_2.4.2_aarch64/bin/ock_shore_convertor [--format <目标转换格式(当前仅netcdf)>] [-t <1~8>(设置线程数) ] [-d (无参数,设置是否开启数据集压缩,默认不开启)] 共享存储目录输入shore文件或文件所在目录 目标格式文件输出目录

  6. (可选)如果不使用Hyper IO库,就不再需要该环境变量,执行以下命令,删除已生效的环境变量。

    unset OCK_IO_CONFIG

Hyper IO库支持的应用和版本

应用

版本

WRF

4.2.2版本

LAMMPS

版本30Nov20

Grapes

  • CMA_GFS_3.3版本3.3
  • CMA_MESO版本5.1

NEMO

4.2版本

QE

6.4.1版本