1 Star 1 Fork 2

AISBench/cluster_tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

分布式运行组件cluster_tools使用说明

工具介绍

工具概述

AISbench分布式运行组件cluster_tools(后简称cluster工具)可以帮助集群中的管理节点给集群其他节点部署AI任务脚本(multi_put);并且可以帮助集群中的管理节点给集群其他节点或节点上的加速卡并行或串行下发命令,同步拉起集群各节点名称相同的训练脚本(multi_exec);AI任务结束后可以帮助管理节点汇总集群其他节点产生的文件结果(multi_get)。

cluster工具是一个Python工具,相对于slurm、openmpi等能完成类似功能的业界主流工具,其主要特点是:

  • 轻量化:整个工具安装包占空间大小仅KB量级,安装时间一般小于10s。
  • 部署方便:cluster工具通过pip install命令可以直接安装。cluster工具只需要安装在管理节点上,不需要部署在集群所有节点;同时可以帮助建立集群间基于ssh key的免密访问;部署全流程只需在管理节点操作。

名词定义

名词 定义
集群 一系列在同一网段的服务器环境。
管理节点 运行分布式运行组件cluster的Linux服务器环境,可以是物理机,也可以是虚拟环境,集群中唯一。
节点 可以被管理节点访问的其他Linux服务器环境,可以是物理机,也可以是虚拟环境。
加速卡 每个节点挂载的用于处理AI任务的计算芯片,GPU、NPU等。

工具依赖

  • OS:Linux

  • Python版本:Python 3.7及以上版本

  • 安装paramiko、scp依赖,下载并安装本工具的whl软件包时自动安装。

    若依赖未安装成功,可手动执行命令安装,进入cluster_tools目录,执行以下命令安装依赖:

    pip install -r requirements.txt
    

安全说明

  • 管理节点与集群其他节点建立的SSH连接是通过paramiko的SSH客户端基于SSH2协议建立的。
  • 将管理节点公钥部署到集群其他节点时会提示用户输入密码,密码通过getpass.getpass获取,获取后不会保存。
  • 将管理节点公钥部署到集群其他节点是基于paramiko的sftp客户端进行传输。

安装和卸载

安装cluster_tools

  1. cluster_tools发行版获取whl包,通过pip install命令安装:

    pip install ais_bench_cluster-<version>-py3-none-linux_<arch>.whl --force-reinstall
    
  2. 执行pip show ais_bench_cluster确认安装完成,输出结果如下:

    Name: ais-bench-cluster
    Version: 2.0
    Summary: ais_bench cluster tool
    Home-page: ais_bench url
    Author:
    Author-email:
    License:
    Location: /xxxx/site-packages
    Requires: paramiko, scp
    Required-by:
    

卸载cluster_tools

卸载cluster工具可以使用如下命令:

pip uninstall ais_bench_cluster

集群节点信息文件内容格式

集群节点信息文件json文件,需要用户自行创建(如nodeinfo_file.json)并按照如下格式配置节点信息(注意删除注释):

{
"ssh_key_path": "", // 必填,需要用户传入的ssh key私钥的路径(传入的私钥建议配置有效期限),确保已经在集群其他计算节点的authorized_keys上部署好对应的公钥。
"cluster": [
    {
        "ip": "xx.xx.xx.xx",  // 必填,节点的ip地址
        "user": "xxxxx", // 必填,节点的用户名
        "port": xxx, // 选填, 节点的端口,默认22
        "work_path": "xxx"  // 选填, 进入节点后所处的路径,默认'./'
    },
    {
        ...
    }
]
}

ssh key私钥的生成与公钥的部署参考附录的“集群ssh key生成与部署流程”章节。

cluster_tools命令行使用方法

命令示例

cluster工具的使用命令示例如下:

python -m ais_bench.cluster <module> --option1 xxx --option2 xxx ...

其中module作为二级命令表示cluster工具的各项子功能,--option*表示子功能参数

具体子功能介绍

multi_exec(集群批量执行命令)

  • 功能介绍

    管理节点控制集群中所有节点以串行/并行执行给定命令。

  • 命令格式

    python -m ais_bench.cluster multi_exec --option1 xxx --option2 xxx ...
    

    其中--option*表示子功能参数。

  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --cmd或-c 需要各节点执行的命令。(请谨慎使用rm -rf等危险命令)
    --mode或-m 以串行或并行操纵节点执行命令,取值对应"serial"或"parallel",默认取"parallel"。
    --device-num或-d 每个节点的加速卡数量。默认值0。当取值为0时,命令直接在每个节点上进行,命令被执行前配置了环境变量RANK_NUM(集群节点数)、NODE_ID(节点编号);当取值>0时,节点上将会开启对应取值数量的并发子进程,在这些子进程中执行命令,命令被执行前每个子进程中配置了环境变量RANK_SIZE(集群总加速卡数)、RANK_ID(当前子进程对应的加速卡在集群中的编号)、DEVICE_NUM(当前节点的开启的子进程数)、DEVICE_ID(当前子进程对应的加速卡在当前节点的编号)。
    注意:命令必须使用单引号限制,如 --cmd 'echo $RANK_ID' 这些默认环境变量才会生效。
  • 命令示例

    python -m ais_bench.cluster -nf nodeinfo.json -c 'echo $RANK_ID;bash run.sh' -d 8
    

single_exec(单节点执行命令)

  • 功能介绍

    管理节点控制集群中某一节点执行给定命令。

  • 命令格式

    python -m ais_bench.cluster single_exec --option1 xxx --option2 xxx ...
    

    其中--option*表示子功能参数。

  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --cmd或-c 需要某一节点执行的命令。(请谨慎使用rm -rf等危险命令)
    --node-id或-n 集群中某一节点的编号(节点编号依据node-file中节点的配置顺序从0开始自动分配),默认取值0。
    --device-num或-d 某一节点的加速卡数量。默认值0。当取值为0时,命令直接在每个节点上进行,命令被执行前配置了环境变量RANK_NUM(集群节点数)、NODE_ID(节点编号);当取值>0时,节点上将会开启对应取值数量的并发子进程,在这些子进程中执行命令,命令被执行前每个子进程中配置了环境变量RANK_SIZE(集群总加速卡数)、RANK_ID(当前子进程对应的加速卡在集群中的编号)、DEVICE_NUM(当前节点的开启的子进程数)、DEVICE_ID(当前子进程对应的加速卡在当前节点的编号)。
    注意:命令必须使用单引号限制,如 --cmd 'echo $RANK_ID' 这些默认环境变量才会生效。

multi_put(集群批量分发资源)

  • 功能介绍

    将管理节点的某个文件或文件夹以串行/并行方式传输给集群的所有节点。

  • 命令格式

    python -m ais_bench.cluster multi_put --option1 xxx --option2 xxx ...
    

    其中--option*表示子功能参数。

  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --src或-s 管理节点上的文件或文件夹路径。
    --dst或-d 集群其他节点上的传输目标路径,相对路径(相对于每个节点的工作路径)
    --mode或-m 以串行或并行操纵节点执行命令,取值对应"serial"或"parallel",默认取"parallel"。
  • 命令示例

    python -m ais_bench.cluster multi_put -nf nodeinfo.json -s run.sh -d ./
    

single_put(单节点分发资源)

  • 功能介绍

    将管理节点的某个文件或文件夹以串行/并行方式传输给集群的某一节点。

  • 命令格式

    python -m ais_bench.cluster single_put --option1 xxx --option2 xxx ...
    

    其中--option*表示子功能参数。

  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --src或-s 管理节点上的文件或文件夹路径。
    --dst或-d 集群中某一节点上的传输目标路径,相对路径(相对于目标节点的工作路径)。
    --node-id或-n 集群中某一节点的编号(节点编号依据node-file中节点的配置顺序从0开始自动分配),默认取值0。

multi_get(集群归集资源)

  • 功能介绍

    将集群的所有节点的某个文件或文件夹以串行/并行方式传输给管理节点。

  • 命令格式

    python -m ais_bench.cluster multi_get --option1 xxx --option2 xxx ...
    

    其中--option*表示子功能参数。

  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --src或-s 集群其他节点上的文件或文件夹路径,相对路径(相对于每个节点的工作路径)。
    --dst或-d 管理节点上的传输目标路径。
    --mode或-m 以串行或并行操纵节点执行命令,取值对应"serial"或"parallel",默认取"parallel"。
  • 命令示例

    python3 -m ais_bench.cluster -nf nodeinfo.json -s result/ -d ./
    

single_get(单节点归集资源)

  • 功能介绍

    将集群中某一节点的某个文件或文件夹以串行/并行方式传输给管理节点。

  • 命令格式

    python -m ais_bench.cluster single_get --option1 xxx --option2 xxx ...
    

    其中--option*表示子功能参数。

  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --src或-s 集群中某一节点上的文件或文件夹路径,相对路径(相对于节点的工作路径)
    --dst或-d 管理节点上的传输目标路径。
    --node-id或-n 集群中某一节点的编号(节点编号依据node-file中节点的配置顺序从0开始自动分配),默认取值0。

init(工具初始化)

不推荐使用,使用此初始化方法的节点在ssh_key有效期内能长期进行免密访问,安全风险高,后续此功能会移除!

  • 功能介绍

    初始化cluster工具,使用此命令后,cluster的其他子功能使用时不需要指定--node-file, 使用默认保存的node_file文件,同时可以协助自动生成新的ssh_key并部署。

  • 命令格式

    python -m ais_bench.cluster init --node-file xxx --auto-set-key
    
  • 参数说明

    参数 说明 是否必选
    --node-file或-nf 包含ssh key和集群节点信息的json文件的路径,json文件格式参考“集群节点信息文件内容格式”章节。
    --auto-set-key或-a 使用此附属命令时cluster会自动部署集群节点的免密访问(会有交互界面依次输入节点的密码)。默认设置key的期限为16周。使用此功能时将不会用到node_file中的"ssh_key_path"配置项 ,"ssh_key_path"的值可以设为空字符串

cluster_tools python API使用方法

调用示例

确保ais_bench cluster工具已安装,调用API方法如下:

from ais_bench.cluster.cluster_module import <some module>

其中some module表示对应的接口函数。

API使用介绍

接口函数与命令行的二级命令完全对应,使用限制也通用。接口函数与命令行的二级命令的映射如下:

cluster_multi_exec(集群批量执行命令)

  • 函数原型

    cluster_multi_exec(node_file: str, cmd: str, mode: str = "parallel", device_num: int = 0)
    
  • 对应命令行二级命令

    multi_exec

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • cmd:--cmd
    • mode:--mode
    • device_num:--device-num

cluster_single_exec(单节点执行命令)

  • 函数原型

    cluster_single_exec(node_file: str, cmd: str, node_id: int = 0, device_num: int = 0)
    
  • 对应命令行二级命令

    single_exec

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • cmd:--cmd
    • node_id:--node-id
    • device_num:--device-num

cluster_multi_put(集群批量分发资源)

  • 函数原型

    cluster_multi_put(node_file: str, src_path: str, dst_path: str, mode: str = "parallel")
    
  • 对应命令行二级命令

    multi_put

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • src_path:--src
    • dst_path:--dst
    • mode:--mode

cluster_single_put(单节点分发资源)

  • 函数原型

    cluster_single_put(node_file: str, src_path: str, dst_path: str, node_id: int = 0)
    
  • 对应命令行二级命令

    single_put

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • src_path:--src
    • dst_path:--dst
    • node_id:--node-id

cluster_multi_get(集群归集资源)

  • 函数原型

    cluster_multi_get(node_file: str, src_path: str, dst_path: str, mode: str = "parallel")
    
  • 对应命令行二级命令

    multi_get

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • src_path:--src
    • dst_path:--dst
    • mode:--mode

cluster_single_get(单节点归集资源)

  • 函数原型

    cluster_single_get(node_file: str, src_path: str, dst_path: str, node_id: int = 0)
    
  • 对应命令行二级命令

    single_get

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • src_path:--src
    • dst_path:--dst
    • node_id:--node-id

cluster_init(工具初始化)

  • 函数原型

    cluster_init(node_file: str, ssh_key: str = "", auto_set_key: bool = False)
    
  • 对应命令行二级命令

    init

  • 函数入参对应附属可选命令(参数含义详见附属命令的说明)

    • node_file:--node-file
    • auto_set_key:--auto-set-key 注意:如果使用了cluster_init接口,后续使用cluster的其他接口时,node_file参数可以取为空,使用入参提供的node_file路径的优先级比init保存的node_file路径的优先级更高。

附录

集群ssh key生成与部署流程

管理节点免密访问集群计算节点的设置参考操作如下:

  1. 登录集群管理节点并生成ssh key。

    ssh-keygen -t rsa -b 2048
    

    安全起见,建议用户在“Enter passphrase”步骤时输入密钥密码,且符合密码复杂度要求。建议执行该命令前先将umask设置为0077,测试完成后再恢复原来umask值。

  2. 将管理节点的公钥拷贝到所有计算节点的机器上。

    ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<ip>
    

    <user>@<ip>替换成要拷贝到的对应计算节点的用户名和IP,例如username1@10.175.1.1。

  3. 设置SSH代理管理SSH密钥。

    ssh-agent bash   # 开启ssh-agent的bash进程
    ssh-add   # 向ssh-agent添加私钥
    

    避免工具批量安装操作过程中输入密钥密码和节点密码。

空文件

简介

AISBench工具配套分布式运行组件,为集群训练提供便利的同步文件传输和命令执行方式。 展开 收起
取消

发行版 (2)

全部

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/aisbench/cluster_tools.git
git@gitee.com:aisbench/cluster_tools.git
aisbench
cluster_tools
cluster_tools
master

搜索帮助