一种任务级GPU算力分时调度的高性能深度学习训练平台
HAI 分时调度训练平台, 可通过 docker-compose 或 k8s 部署,提供功能:
nfs, ceph, wekalauncher.manager_envs 中配置 HAS_RDMA_HCA_RESOURCE: '0'构建
构建 all-in-one hai-platform 镜像
注:如需包含 haienv 202207 运行环境(包含cuda, torch),以同时作为训练任务镜像,需 export BUILD_TRAIN_IMAGE=1;如需自定义训练任务镜像,请参考 附录:初始化数据库 中 train_environment 的配置说明。
# replace IMAGE_REPO with your own repo
$ IMAGE_REPO=registry.cn-hangzhou.aliyuncs.com/hfai/hai-platform bash one/release.sh
build hai success:
hai-platform image: registry.cn-hangzhou.aliyuncs.com/hfai/hai-platform:fa07f13
hai-cli whl:
/home/hai-platform/build/hai-1.0.0+fa07f13-py3-none-any.whl
/home/hai-platform/build/haienv-1.4.1+fa07f13-py3-none-any.whl
/home/hai-platform/build/haiworkspace-1.0.0+fa07f13-py3-none-any.whl安装 hai-cli 命令行
pip3 install /home/hai-platform/build/hai-1.0.0+fa07f13-py3-none-any.whl
pip3 install /home/hai-platform/build/haienv-1.4.1+fa07f13-py3-none-any.whl
pip3 install /home/hai-platform/build/haiworkspace-1.0.0+fa07f13-py3-none-any.whl也可以使用预构建的镜像和命令行:
# 仅包含 hai-platform
registry.cn-hangzhou.aliyuncs.com/hfai/hai-platform:latest
# 包含 hai-platform 和 haienv 202207 运行环境(包含cuda, torch)
registry.cn-hangzhou.aliyuncs.com/hfai/hai-platform:latest-202207
pip3 install hai --extra-index-url https://pypi.hfai.high-flyer.cn/simple --trusted-host pypi.hfai.high-flyer.cn -U部署 hai-platform 到 k8s 集群
…按提示配置相关环境变量,如共享文件系统路径、节点分组信息、训练镜像、用户信息、挂载点等,确认无误后部署(如需自定义更多配置,可运行 hai-up dryrun 获取配置模板并自行修改,手动部署)
hai-up config > config.sh
# customize config.sh
hai-up run -c config.sh使用 hai-cli 初始化和提交任务
HAI_SERVER_ADDR=`kubectl -n hai-platform get svc hai-platform-svc -o jsonpath='{.status.loadBalancer.ingress[0].ip}'`
# TOKEN 为 USER_INFO 设置的token
hai-cli init ${TOKEN} --url http://${HAI_SERVER_ADDR}
# python文件默认需放在用户工作目录 ${SHARED_FS_ROOT}/hai-platform/workspace/{user.user_name}
# 如置于其他路径,需要在pg数据库storage表中添加相应挂载项
hai-cli python ${SHARED_FS_ROOT}/hai-platform/workspace/$(whoami)/test.py -- -n 1如需停用hai-platform,运行 hai-up down
hai-up run/dryrun 会创建 init.sql, override.toml 配置文件,以及部署到 k8s/docker-compose 的yaml文件,如有自定义配置需求,可自行修改。部分配置解释如下。
默认打开如下端口:
平台需要在集群创建 deployment,statefulset,pod,configmap 等资源,需要通过 rbac 为平台账号授权,或者直接赋予admin权限,对应的 kubeconfig 会被挂载到hai-platform的默认路径/root/.kube/config
目前支持两类分组,TRAINING_GROUP, JUPYTER_GROUP,分别表示训练节点和jupyter节点。 需要指定分组名,以及分组内节点列表,如:
export MARS_PREFIX="hai-platform-one"
export TRAINING_GROUP="training"
export JUPYTER_GROUP="jupyter_cpu"
export TRAINING_NODES="cn-hangzhou.172.23.183.227"
export JUPYTER_NODES="cn-hangzhou.172.23.183.226"设置分组信息后,启动脚本会自动配置 k8s node 的 label 为 ${MARS_PREFIX}_mars_group=${TRAINING_GROUP} 或 ${MARS_PREFIX}_mars_group=${JUPYTER_GROUP}; 并给 hai-platform 的 schduler 设置调度分组,同时设置数据库中的quota
默认会挂载如下路径
…/var/lib/postgresql/12/main 作为数据目录override.toml 的 experiment.log.dist 中镜像内建了 pgsql 和 redis,并且通过 override.toml 配置相关信息。
[database.postgres.primary]
host = '${HAI_SERVER_ADDR}'
port = 5432
user = '${POSTGRES_USER}'
password = '${POSTGRES_PASSWORD}'
[database.postgres.secondary]
host = '${HAI_SERVER_ADDR}'
port = 5432
user = '${POSTGRES_USER}'
password = '${POSTGRES_PASSWORD}'
[database.redis]
host = '${HAI_SERVER_ADDR}'
port = 6379
db = 0
password = '${REDIS_PASSWORD}'hai-platfrom 的用户信息,以及集群挂载信息都在 postgres 数据库中,可以通过数据库来控制用户的 quota、storage、权限等等,
初始化时会执行一次 init.sql, 初始化后如需修改数据库信息,请直接到数据中更改。
init.sql 模板示例如下:
…平台配置为 toml 格式,镜像中已经默认做了大量配置,用户只需要做基本的个性化配置即可,通过override.toml来覆盖镜像默认配置。
override.toml 示例:
…开发容器及 hai-cli 都提供了 SSH 相关的功能,但出于安全考虑目前任务容器中默认不启动 SSH 服务,也未为平台用户自动生成用于 SSH 连接的密钥。
如果想要使用相关功能,可以按照如下步骤配置:
storage 表,将此脚本挂载至任务容器的 /usr/local/sbin/hf-scripts/post_system_init/ 目录下,
以使其在任务容器的初始化阶段运行。关于此目录的更多信息,可以参考 /marsv2/entrypoints 中的任务初始化脚本。暂无开放 Issues,或尚未同步最近议题。