文档

dsdemo代码介绍

更新时间:

本文为您介绍dsdemo代码所有功能板块, 以及详细的使用说明。

前提条件

  • 已创建DataScience集群,详情请参见创建Data Science集群

  • 下载dsdemo代码:请已创建DataScience集群的用户,使用钉钉搜索钉钉群32497587加入钉钉群以获取dsdemo代码。

config配置

# cat config
# !!! Extremely Important !!!
# !!! You must use A NEW EXP different from others !!!
EXP=exp1

# !!! ACR, Make sure NAMESPACE is public !!!
# kubectl create secret docker-registry regcred --docker-server=registry-vpc.cn-beijing.aliyuncs.com --docker-username=xxx --docker-password=yyy --docker-email=abc@hotmail.com
REGISTRY=registry-vpc.cn-beijing.aliyuncs.com
NAMESPACE=dsexperiment
IMAGE_SECRET=regcred
USERNAME=AAAAAAAA
PASSWORD=BBBBBBBB

# default storage class
# On EMR ECS:    nfs-client
# On Aliyun ACK: alibabacloud-cnfs-nas
DEFAULT_STORAGECLASS=nfs-client

# k8s namespace, must be same with username when you are using sub-account.
KUBERNETES_NAMESPACE=default

# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep k8s-dashboard-admin | awk '{print $1}')
KUBERNETES_DASHBOARD_HOST=http://123.57.**.**:32699

# ingress domain
INGRESS_DOMAIN=baidu.com

# PREFIX, could be a magic code.
PREFIX=prefix

# sc
NFSPATH=/mnt/disk1/k8s_pv/default_storage_class/
#NFSPATH=/mnt/disk1/nfs/ifs/kubernetes/

# ak/sk for access oss
OSS_ENABLE=false
OSS_AKID=AAAAAAAA
OSS_AKSECRET=BBBBBBBB
OSS_ENDPOINT=oss-cn-beijing-internal.aliyuncs.com
OSS_BUCKETNAME=dstest-beijing
OSS_DIR=
# !!! Do not change !!!
OSS_OBJECTNAME=%%EXP%%_faissserver/item_embedding.faiss.svm

# ak/sk for access oss
OSS_HDFS_ENABLE=false
OSS_HDFS_AKID=AAAAAAAA
OSS_HDFS_AKSECRET=BBBBBBBB
OSS_HDFS_ENDPOINT=cn-beijing.oss-dls.aliyuncs.com
OSS_HDFS_BUCKETNAME=dstestossmnt-beijing
OSS_HDFS_OBJECTNAME=test/1.csv
OSS_HDFS_DIR=

# hdfsmount
# example:
#   192.168.**.**:9000 192.168.**.**:8020
HDFS_ENABLE=false
HDFS_MOUNTPOINT=192.168.32.114:9000
HDFS_DIR=

# nasmount
NAS_ENABLE=false
NAS_AKID=AAAAAAAA
NAS_AKSECRET=BBBBBBBB
NAS_MOUNTPOINT=1ac8f48ac1-idh23.cn-beijing.nas.aliyuncs.com
NAS_DIR=

# s3mount
S3_ENABLE=false
S3_AKID=AAAAAAAA
S3_AKSECRET=BBBBBBBB
S3_ENDPOINT=s3.us-west-1.amazonaws.com
S3_REGION=us-west-1
S3_BUCKET=dstests3
S3_DIR=

# region
REGIONID=cn-beijing

# emr-datascience clusterid
CLUSTERID="c-5777b31dbdfa****"

# HDFSADDR, train/test dir should be exist under $HDFSADDR, like
# user
# └── easy_rec
#     ├── 20210917
#     │   ├── negative_sampler
#     │   │   ├── n0.csv
#     │   │   └── _SUCCESS
#     │   ├── hard_negative_sampler_user
#     │   │   ├── x0.csv
#     │   │   └── _SUCCESS
#     │   ├── hard_negative_sampler_item
#     │   │   ├── y0.csv
#     │   │   └── _SUCCESS
#     │   ├── hard_negative_sampler_edge
#     │   │   ├── e0.csv
#     │   │   └── _SUCCESS
#     │   ├── test
#     │   │   ├── test0.csv
#     │   │   └── _SUCCESS
#     │   └── train
#     │       ├── train0.csv
#     │       └── _SUCCESS
#     └── 20210918
#HDFSADDR=hdfs://192.168.**.**:8020/user/easy_rec/metric_learning_i2i
#HDFSADDR=/ossmnt/user/easy_rec/metric_learning_i2i
#HDFSADDR=/osshdfsmnt/user/easy_rec/metric_learning_i2i
#HDFSADDR=/nasmnt/user/easy_rec/metric_learning_i2i
#HDFSADDR=/s3mnt/user/easy_rec/metric_learning_i2i
HDFSADDR=/osshdfsmnt/user/easy_rec/metric_learning_i2i
#MODELDIR=hdfs://192.168.**.**:9000/user/easy_rec/metric_learning_i2i_bk
#MODELDIR=/osshdfsmnt/user/easy_rec/metric_learning_i2i_bk
#MODELDIR=/nasmnt/user/easy_rec/metric_learning_i2i_bk
MODELDIR=/nasmnt/experiment_bk/

PREDICT_FOLDER=test
EXPORTDIR=/train/tf_model

REGEX="*.csv"
SUCCESSFILE="train/_SUCCESS,test/_SUCCESS"

EVALRESULTFILE=experiment/eval_result.txt

# for allinone.sh development based on supposed DATE & WHEN & PREDATE
# HOUR is empty meaning no hour folder.
DATE=20230601
HOUR=
WHEN=20230601190001
PREDATE=20230531
NEXTDATE=20230602

# for daybydaytrain_{easyrec,tf}.sh & multidays training, use HDFSADDR, MODELDIR
START_DATE=20230601
END_DATE=20230606

# HIVEINPUT
DATABASE=testdb
TRAIN_TABLE_NAME=tb_train
EVAL_TABLE_NAME=tb_eval
NEGATIVE_SAMPLER_TABLE_NAME=tb_negative_sample
HARD_NEGATIVE_SAMPLER_USER_TABLE_NAME=tb_negative_sample_user
HARD_NEGATIVE_SAMPLER_ITEM_TABLE_NAME=tb_negative_sample_item
HARD_NEGATIVE_SAMPLER_EDGE_TABLE_NAME=tb_negative_sample_edge
PREDICT_TABLE_NAME=tb_predict
PREDICT_OUTPUT_TABLE_NAME=tb_predict_out
PARTITION_NAME=ds

# DSSM: inference user/item model with user&item feature
# metric_learning_i2i: infernece model with item feature
# SEP: user&item feature file use same seperator
USERFEATURE=taobao_user_feature_data.csv
USER_SELECTED_COLS="user_id,cms_segid,cms_group_id,age_level,pvalue_level,shopping_level,occupation,new_user_class_level,tag_category_list,tag_brand_list"
USER_RESERVED_COLS=user_id
USER_OUTPUT_COLS=user_emb
ITEMFEATURE=taobao_item_feature_data.csv

# dssm_u2i
#ITEM_SELECTED_COLS="pid,adgroup_id,cate_id,campaign_id,customer,brand,price"
#ITEM_RESERVED_COLS=adgroup_id
#ITEM_OUTPUT_COLS=item_emb

# metric_learning_i2i
ITEM_SELECTED_COLS="itemid,cate_id,campaign_id,brand,customer,price"
ITEM_RESERVED_COLS=itemid
ITEM_OUTPUT_COLS=norm_embedding

# faiss_mysql: mysql as user_embedding storage, faiss as itemembedding index.
# holo_holo: holo as user & item embedding , along with indexing.
VEC_ENGINE=faiss_mysql
MYSQL_HOST=mysql.bitnami
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=emr-datascience

# wait before pod finished after easyrec's python process end.
# example: 30s 10m 1h
WAITBEFOREFINISHED=10s

# tf train
# PS_NUMBER take effect only on training.
# WORKER_NUMBER take effect on training and predict.
EASYREC_TRAINING_REPOSITORY=easyrec-training
EASYREC_TRAINING_VERSION=latest
EASYREC_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-easyrec-training:0.6.3-1
PS_NUMBER=2
WORKER_NUMBER=4
SELECTED_COLS=""
EDIT_CONFIG_JSON=""
# tf export
ASSET_FILES=""

# example: best_ckpt
# not end with /
CHECKPOINT_DIR=

# predict output file separator
OUTPUT_SEP=","

# pure tensorflow train
TENSORFLOW_TRAINING_REPOSITORY=tf-training
TENSORFLOW_TRAINING_VERSION=latest
TENSORFLOW_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-tf-training:2.13.0-1
TENSORFLOW_PS_NUMBER=2
TENSORFLOW_WORKER_NUMBER=4
TENSORFLOW_BATCHSIZE=4096
TENSORFLOW_LR=0.00032
TENSORFLOW_GPUS=4
TENSORFLOW_LOG_DIR=hdfs://192.168.**.**:9000/training_logs

# pytorch train
PYTORCH_TRAINING_REPOSITORY=pytorch-training
PYTORCH_TRAINING_VERSION=latest
PYTORCH_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-pytorch-training:cpu-1.13.1-1
#PYTORCH_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-pytorch-training:gpu-1.12.0-2
PYTORCH_MASTER_NUMBER=1
PYTORCH_WORKER_NUMBER=1
PYTORCH_GPUS=1
PYTORCH_LOG_DIR=hdfs://192.168.**.**:9000/training_logs

# deepspeed training
DEEPSPEED_TRAINING_REPOSITORY=deepspeed-training
DEEPSPEED_TRAINING_VERSION=latest
#DEEPSPEED_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-deepspeed-training:latest
DEEPSPEED_MASTER_NUMBER=1
DEEPSPEED_WORKER_NUMBER=1
PARTS=1
STEPS=100
DEEPSPEED_GPUS=1
DEEPSPEED_LOG_DIR=hdfs://192.168.**.**:9000/training_logs

# deepface
DEEPFACE_REPOSITORY=deepface
DEEPFACE_VERSION=latest
DEEPFACE_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-deepface:latest

# jax train
JAX_TRAINING_REPOSITORY=jax-training
JAX_TRAINING_VERSION=latest
#JAX_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-jax-training:latest
JAX_MASTER_NUMBER=2
JAX_WORKER_NUMBER=3

# ray train
RAY_TRAINING_REPOSITORY=ray-training
RAY_TRAINING_VERSION=latest
#RAY_TRAINING_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ray-training:latest

# easyrec customize action
CUSTOMIZE_ACTION=easy_rec.python.tools.modify_config_test
USERDEFINEPARAMETERS="--template_config_path hdfs://192.168.**.**:9000/user/easy_rec/rec_sln_test_dbmtl_v3281_template.config --output_config_path hdfs://192.168.**.**:9000/user/easy_rec/output.config"
#CUSTOMIZE_ACTION=easy_rec.python.tools.split_model_pai
#USERDEFINEPARAMETERS="--model_dir /train/tf_model_dssm/%%DATE%%/%%EXP%%_tmp_%%WHEN%% --user_model_dir /train/tf_model_dssm_user/%%DATE%%/%%EXP%%_tmp_%%WHEN%% --item_model_dir /train/tf_model_dssm_item/%%DATE%%/%%EXP%%_tmp_%%WHEN%%"

# hivecli
HIVE_REPOSITORY=ds_hivecli
HIVE_VERSION=latest
#HIVE_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_hivecli:latest

# ds-controller
DSCONTROLLER_REPOSITORY=ds_controller
DSCONTROLLER_VERSION=latest
#DSCONTROLLER_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_controller:latest

# aiserver
AISERVER_REPOSITORY=ds_aiserver
AISERVER_VERSION=latest
#AISERVER_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_aiserver:latest

# notebook
NOTEBOOK_REPOSITORY=ds_notebook
NOTEBOOK_VERSION=latest
#NOTEBOOK_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_notebook:3.6-1
NOTEBOOK_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_notebook:3.7-1
#NOTEBOOK_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_notebook:3.8-1
#NOTEBOOK_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_notebook:3.10-1

# hue
HUE_REPOSITORY=ds_hue
HUE_VERSION=latest
HUE_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_hue:latest

# httpd
HTTPD_REPOSITORY=ds_httpd
HTTPD_VERSION=latest
HTTPD_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_httpd:latest

# postgis
POSTGIS_REPOSITORY=ds_postgis
POSTGIS_VERSION=latest
#POSTGIS_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_postgis:latest

# customize
CUSTOMIZE_REPOSITORY=ds_customize
CUSTOMIZE_VERSION=latest
#CUSTOMIZE_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_customize:latest

# faissserver
FAISSSERVER_REPOSITORY=ds_faissserver
FAISSSERVER_VERSION=latest
FAISSSERVER_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_faissserver:latest

# vscode
VSCODE_REPOSITORY=ds_vscode
VSCODE_VERSION=latest
VSCODE_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_vscode:4.7.0-1

# sftp
SFTP_REPOSITORY=ds_sftp
SFTP_VERSION=latest
SFTP_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_sftp:latest

# tugraph
TUGRAPH_REPOSITORY=ds_tugraph
TUGRAPH_VERSION=latest
TUGRAPH_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-ds_tugraph:latest

# stablediffusion
STABLEDIFFUSION_REPOSITORY=stablediffusion
STABLEDIFFUSION_VERSION=latest
STABLEDIFFUSION_IMAGE=mybigpai-registry.cn-beijing.cr.aliyuncs.com/aigc/sdwebui:0.5.4
STABLEDIFFUSION_FRONTEND_NUMBER=1
STABLEDIFFUSION_MIDDLE_NUMBER=1
STABLEDIFFUSION_BACKEND_NUMBER=2
STABLEDIFFUSION_MYSQL_HOST=mysql.bitnami
STABLEDIFFUSION_MYSQL_PORT=3306
STABLEDIFFUSION_MYSQL_USER=root
STABLEDIFFUSION_MYSQL_PASSWORD=emr-datascience
STABLEDIFFUSION_MYSQL_DATABASE_KC=keycloak
STABLEDIFFUSION_MYSQL_DATABASE_SD=stablediffusion
STABLEDIFFUSION_MYSQL_DATABASE_WEBUI=webui_ds

# tag2text
TAG2TEXT_REPOSITORY=tag2text
TAG2TEXT_VERSION=latest
TAG2TEXT_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/official/public-tag2text:latest

# wandb
WANDB_REPOSITORY=wandb
WANDB_VERSION=latest
WANDB_PUBLIC_IMAGE=datascience-registry.cn-beijing.cr.aliyuncs.com/tools/wandb-local:0.41.0

# ak/sk for cluster resize, only support resize TASK now!!!
EMR_AKID=AAAAAAAA
EMR_AKSECRET=BBBBBBBB
HOSTGROUPTYPE=TASK
INSTANCETYPE=ecs.g6.8xlarge
NODECOUNT=1
SYSDISKCAPACITY=120
SYSDISKTYPE=CLOUD_SSD
DISKCAPACITY=480
DISKTYPE=CLOUD_SSD
DISKCOUNT=4

# ak/sk for ack cluster.
ACK_AKID=AAAAAAAA
ACK_AKSECRET=BBBBBBBB
ACK_CLUSTERID=c19a0070ff35b4e38b90f2dba977ed203
ACK_ELASTIC_POOL=xx_task
ACK_GATEWAY_IMAGE_NAME=EMR-DataScience-v11

# PVC_NAME IS DEPRECATED!!! PLEASE IGNORE IT !!!
PVC_NAME="default-pvc"

SAVEDMODELS_RESERVE_DAYS=3

HIVEDB="jdbc:hive2://192.168.**.**:10000/zqkd"

# eval threshold
THRESHOLD=0.3

# eval result key, 'auc' 'auc_ctcvr' 'recall@5'
EVALRESULTKEY="recall@1"

# eval hit rate for vector recall
ITEM_EMB_TABLE_NAME=item_emb_table
GT_TABLE_NAME=gt_table
EMBEDDING_DIM=32
RECALL_TYPE="u2i"
TOPK=100
NUM_INTERESTS=1
KNN_METRIC=0
# Separator cannot be set to   ,  |   #
# localfile can only be separated by tab and must have colmue , without setting the separator
ITEM_EMB_TABLE_FIELD_SEP=
GT_TABLE_FILED_SEP=

# sms or dingding
ALERT_TYPE=sms

# sms alert
SMS_AKID=AAAAAAAA
SMS_AKSECRET=BBBBBBBB
SMS_TEMPLATEDCODE=SMS_220default
SMS_PHONENUMBERS="186212XXXXX,186211YYYYY"
SMS_SIGNATURE="mysignature"

# dingtalk alert
ACCESS_TOKEN=AAAAAAAA

# pai-eas
EAS_AKID=AAAAAAAA
EAS_AKSECRET=BBBBBBBB
#EAS_ENDPOINT=pai-eas.cn-beijing.aliyuncs.com
EAS_ENDPOINT=pai-eas-manage-vpc.cn-beijing.aliyuncs.com
EAS_SERVICENAME=datascience_eastest
EAS_SERVICENAME2=datascience_eastest2

# ak/sk for access holo
HOLO_AKID=AAAAAAAA
HOLO_AKSECRET=BBBBBBBB
HOLO_ENDPOINT=hgpostcn-cn-zmb2yiq5****-cn-beijing.hologres.aliyuncs.com

# tensorboard port for run_tensorboard.sh
TENSORBOARDPORT=6006

# nni port
NNIPORT=38080

# jupyter password
JUPYTER_PASSWORD=emr-datascience

# enable_overwrite easyrec whl & easyrec_model.config, these two file were
# stored in MODELDIR/*
ENABLE_OVERWRITE=true

# For easyrec, if ENABLE_OVERWRITE=true then ENABLE_CONFIGMAP_OVERWRITE
# Notice, this option only take effect on easyrec config, because of 3MB limits.
ENABLE_MOUNT_CONFIGMAP=true

# slb
LOADBALANCER_AKID=AAAAAAAA
LOADBALANCER_AKSECRET=BBBBBBBB
LOADBALANCERID=lb-2zee89fb6z4glreop****

# datascience administrator, common user should not touch these parameters.
DATASCIENCE_ADMIN_AKID=AAAAAAAA
DATASCIENCE_ADMIN_AKSECRET=BBBBBBBB

# For some users who are running pyspark & meachine learning jobs in jupyter notebook.
# ports for mapping when notebook enabled, multi-users will conflict on same node.
HOSTNETWORK=true
MAPPING_AISERVER_PORT=8080
MAPPING_FILEBROWSER_PORT=5000
MAPPING_STABLEDIFFUSION_WEBUI_PORT=16000
MAPPING_JUPYTER_NOTEBOOK_PORT=16200
MAPPING_NNI_PORT=16201
MAPPING_TENSORBOARD_PORT=16202
MAPPING_VSCODE_PORT=16203
MAPPING_STABLEDIFFUSION_PORT=16204
MAPPING_KEYCLOAK_PORT=16205
MAPPING_DEEPFACE_PORT=16206
MAPPING_SFTP_PORT=16207
MAPPING_TUGRAPH_PORT=16208
MAPPING_HTTPD_PORT=16209
MAPPING_HUE_PORT=16210
MAPPING_CHATGLM_PORT=16211
MAPPING_TAG2TEXT_PORT=16212
MAPPING_WANDB_PORT=16213

极简模式提交任务

# sh allinone.sh -d

loading ./config

You are now working on k8snamespace: default

*** Welcome to DataScience ***
0)          Exit                                                                          K8S: default, EXP: exp1
ppd)        Prepare data                    ppk)        Prepare DS/K8S config             mds)        mount datasource to ecs/gateway
1|build)    build easyrec-training image    buildall)   build all images(slow)            ser)        showevalresult
apc/dpc)    apply/delete-easyrec-precheck   2/3)        apply/delete-easyrec-training     4/5)        apply/delete-easyrec-eval
4d/5d)      apply/delete-easyrec-evaldist   6/7)        apply/delete-easyrec-export       4hr/5hr)    apply/delete-easyrec-evalhitrate
8/9)        apply/delete-easyrec-serving    10/11)      apply/delete-easyrec-predict      12/13)      apply/delete-easyrec-featureselection
14/15)      apply/delete-easyrec-customize  18/19)      apply/delete-ds-std-training      cwd/dwd/swd)create/delete/show-wandb
20/21)      apply/delete-ds-glm-training    22/23)      apply/delete-ds-chatglm-training  24/25)      apply/delete-tftrain-example1
26/27)      apply/delete-tftrain-example2   28/29)      apply/delete-tftrain-example3     30/31)      apply/delete-tftrain-example4
32/33)      apply/delete-tftrain-example5   34/35)      apply/delete-tftrain-example6     36/37)      apply/delete-tftrain-example7
38/39)      apply/delete-tftrain-example8   mt/dmt)     apply/delete-multidaystraining    me/dme)     apply/delete-multidayseval
40/41)      apply/delete-pttrain-gloocpu    42/43)      apply/delete-pttrain-gloogpu      44/45)      apply/delete-pttrain-ncclgpu
cnt/dnt/snt)create/delete/show-notebook     cvs/dvs/svs)create/delete/show-vscode         cdf/ddf/sdf)create/delete/show-deepface
csdb/dsdb/csdb)create/delete/show-SD-base   csd/dsd/ssd)create/delete/show-SD-frontend    ctt/dtt/stt)create/delete/show-tag2text
moss/uoss)  mount/umount OSS                mosshdfs/uosshdfs)mount/umount OSSHDFS        mhdfs/uhdfs)mount/umount HDFS
mnas/unas)  mount/umount NAS                ms3/us3)    mount/umount AWS-S3               cmts)       check mounting status
manony)     mount OSS/OSSHDFS/HDFS/S3/NAS   uanony)     umount OSS/OSSHDFS/HDFS/S3/NAS    ctb/dtb/DTBA/stb)create/delete/show-TensorBoard(OHSN)
a)          kubectl get tfjobs              b)          kubectl get sdep                  c)          kubectl get pytorchjobs
mp|mpl)     compile mlpipeline              ppl)        compile pipelines                 wfl)        compile workflows
tb)         tensorboard(hdfs)               logs)       show pod logs                     setnl)      set k8s node label
tp)         kubectl top pods                tn)         kubectl top nodes                 util)       show nodes usage
e|clean)    make clean                      cleanall)   make cleanall                     bu)         bdupload
99)         kubectl get pods                99l)        get pods along with log url       sall)       show middleware document links
>

dsdemo功能介绍

基础环境配置

命令选项

说明

ppd

准备测试数据,将testdata/*的数据复制到HDFS或NAS中。

ppk

  • 准备基本环境。例如设置serviceaccount。

  • 安装Jindo基本底座到k8s中.

  • 为k8s的Grafana、Kubeflow和Dashboard等设置SLB,便于用户访问。

重要

该命令属于环境初始化工作,必须执行。

mds

将5大存储(OSS、OSS-HDFS、HDFS、S3、NAS)挂载到ECS本地环境,对应的目录分别是/ossmnt、/osshdfsmnt、/hdfsmnt、/nasmnt和/s3mnt。

creg/dreg

通过读取config/REGISTRY*相关信息,在k8s中创建docker-registry regcred,使得k8s可以拉取非公开的ACR镜像。

ricrt

默认情况下,k8s的有效期是1年,需重新签发,有效期为10年。此命令选项仅限on ECS形态的Data Science集群;on ACK方案需要在控制台管理。

cslb/dslb

为了配置k8s具有控制SLB的权限,需要在配置service时使用。 此命令选项仅限on ECS形态的Data Science集群。

Docker环境配置

命令选项

说明

dlogin

执行docker login,读取config/REGISTRY*相关信息,构建各种镜像后,才能将其推送到ACR。如果没有权限,不能进行推送。

重要

该命令属于环境初始化工作,必须执行。

dlogout

docker logout,用于执行登出操作的。

cacr

检查ACR的状态是否正常,该方法已被弃用。

数据源

命令选项

说明

moss/uoss

挂载或卸载OSS到k8s中,OSS配置请参见config/OSS_*

mosshdfs/uosshdfs

挂载或卸载OSS-HDFS到k8s中,osshdfs配置请参见config/OSS_HDFS_*

创建OSS Bucket时并开通授权访问OSS-HDFS服务,具体操作请参见开通并授权访问OSS-HDFS服务

mhdfs/uhdfs

挂载或卸载HDFS到k8s中,hdfs配置见config/HDFS_*,可以将EMR的HDFS挂载到k8s形成PVC使用,像使用本地文件一样读取训练数据。

mnas/unas

挂载或卸载NAS到k8s中,NAS配置见config/NAS_*

ms3/us3

挂载或卸载AWS S3 bucket到k8s中,S3配置见config/S3_*

cmts

查看OSS、OSS-HDFS、HDFS、AWS S3的挂载状态。

manony

在anonymous空间挂载OSS、OSS-HDFS、HDFS、AWS S3、NAS等,Kubeflow例行化任务均运行在anonymous空间。

uanony

在anonymous空间卸载OSS、OSS-HDFS、HDFS、AWS S3、NAS等。

clnas

检查ECS本地挂载NAS的状态是否正常。

closs

检查ECS本地挂载OSS的状态是否正常。

closshdfs

检查ECS本地挂载OSS-HDFS的状态是否正常。

clhdfs

检查ECS本地挂载HDFS的状态是否正常。

cls3

检查ECS本地挂载AWS S3的状态是否正常。

模型训练

EasyRec

命令选项

说明

1|build

构建EasyRec训练镜像。easyrec介绍请参见easyrec

apc|dpc

提交或删除EasyRec Precheck任务,可用于在训练之前的基本环境检查,例如数据分隔符是否正确、字段数是否匹配等, 建议先做precheck后,再提交训练任务。

2/3

提交或删除EasyRec训练任务。

4/5

提交或删除EasyRec单点评估任务,如需提交或删除分布式评估任务请见4d/5d

4d/5d

提交或删除EasyRec分布式评估任务。

6/7

提交或删除EasyRec导出任务,将训练过程中产生的Checkpoint导出SavedModel到MODELDIR。MODELDIR变量见config配置,可以是HDFS地址或者是NAS地址。

4hr/5hr

提交或删除EasyRec Hitrate任务,可以用来查看训练效果。

8/9

部署或删除TFServing,读取MODELDIR中的SavedModel并部署在Data Science中,使用SeldonCore底座。

10/11

提交或删除Predict任务,可用于训练测试数据批量话Inference。

12/13

提交或删除Feature Selection任务,用来查看feature作用大小。

14/15

提交或删除EasyRec自定义动作。如果上述选项不能满足您的需求,您可以尝试自定义操作。

mt/dmt

提交或删除多天数据训练任务。该训练任务可以处理多天的数据,其起止日期由config文件中的START_DATE和END_DATE指定,闭区间。起止日期之间的所有数据都会被用于训练。

me/dme

提交或删除多天数据评估任务。该评估任务可以处理多天的数据,其起止日期由config文件中的START_DATE和END_DATE指定,闭区间。起止日期之间的所有数据都会被用于评估。

ctb/dtb/DTBA/stb

创建、删除、删除所有、查看TensorBoard,EasyRec训练过程中可以创建TensorBoard实例来查看训练效果,loss曲线等。

image.pngimage.png

sh daybydaytrain.sh

可以串行地为每一天的数据启动训练任务,并在正常结束后启动下一天的训练任务,起止日期由config文件中的START_DATE和END_DATE指定。此工具可方便您训练历史数据。

Serving

命令选项

说明

8/9

部署或删除tfserving,读取MODELDIR中的SavedModel并部署在Data Science中,使用SeldonCore底座。

TensorFlow

命令选项

说明

24/25

提交或删除纯TensorFlow训练任务example1。

26/27

提交或删除纯TensorFlow训练任务example2。

28/29

提交或删除纯TensorFlow训练任务example3。

30/31

提交或删除纯TensorFlow训练任务example4。

32/33

提交或删除纯TensorFlow训练任务example5,使用ps worker模式。example5对应使用的文件为ps_worker_strategy-with-keras.py

34/35

提交或删除纯TensorFlow训练任务example6,使用ps worker模式。example6对应使用的文件为ps_worker_strategy-with-keras_mnist.py

36/37

提交或删除纯TensorFlow训练任务example7,使用ps worker模式。example7对应使用的文件为ps_worker_strategy-with-keras_mmoe.py

38/39

提交或删除纯TensorFlow训练任务example8,使用allreduce模式。example8对应使用的文件为allreduce_strategy-with-keras_mmoe.py

btfi

构建TensorFlow镜像,并上传到ACR。

PyTorch

命令选项

说明

40/41

提交或删除基于纯PyTorch框架、CPU后端的训练任务。

42/43

提交或删除基于纯PyTorch框架、Gloo-GPU后端的训练任务。

44/45

提交或删除基于纯PyTorch框架、NCCL-GPU后端的训练任务。

bpti

构建PyTorch镜像,并上传到ACR。

DeepSpeed

命令选项

说明

18/19

提交或删除基于Deepspeed-std框架的任务,可用于大型模型的训练等,建议与多机多卡配合使用。

bdsi

构建Deepspeed镜像,并上传到ACR。

DeepFace

命令选项

说明

cdf/ddf/sdf

创建或删除Deepface实例,该实例将运行VNC服务器,您需要通过VNC Viewer连接。如果当前ECS装有GPU,则您也可以通过在本地Docker运行的sh docker_run_local.sh命令来运行该实例。

ChatGLM

命令选项

说明

20/21

提交或删除基于Deepspeed-GLM框架的任务。GLM详情请参见GLM

22/23

提交或删除基于Deepspeed-ChatGLM框架的任务。Chatglm-6B详情请参见ChatGLM-6B

bdsi

构建Deepspeed镜像,并上传到ACR。

StableDiffusion

命令选项

说明

csdb/dsdb/ssdb

创建、删除或查看StableDiffusion底座。

csd/dsd/ssd

创建、删除或查看StableDiffusion-Front。

bsdi

构建StableDiffusion镜像,并上传到ACR。

TagText

命令选项

说明

ctt/dtt/stt

创建、删除或查看Tag2Text。

btti

构建Tag2Text镜像,并上传到ACR。

TuGraph

命令选项

说明

ctg/dtg/stg

创建、删除或查看TUGraph实例,并显示TUGraph连接。

image.png

btgi

构建TUGraph镜像,并上传到ACR。

Wandb

命令选项

说明

cwd/dwd/swd

创建、删除或查看Wandb实例,并显示Wandb连接。

bwdi

构建Wandb镜像。

训练工具

Tensorboard

仅限checkpoint存放于hdfs://xxx的地址,例如ckpt存放于OSS-HDFS、NAS等。您可以自行修改run_tensorboard.sh脚本,调整相应参数。

cd /root/dsdemo/ml_on_ds

#查看20211209训练ckpt的Tensorboard信息。
sh run_tensorboard.sh 20211209

编译Pipeline

命令选项

mp|mpl

创建一个名为mlpipeline.py的文件,然后使用Kubeflow的编译器将其打包成*_mlpipeline.tar.gz文件。该TAR文件可用于Kubeflow中的例行化运行。

ppl

将pipelines文件夹中的所有*.py文件打包成可执行的Pipeline文件,以便在Kubeflow中自动化运行这些Pipeline。

wfl

构建pipeline目录下的多个Workflow文件(*.json),生成的TAR文件可以交由Kubeflow运行。

bu

上传bigdata目录到NAS或HDFS中。

数据开发

Notebook(Jupyter,Jupyter-lab)

命令选项

说明

cnt/dnt/snt

创建、删除或查看Notebook,该Notebook默认使用Python 3.7环境。

如果需要使用Python 3.6、Python 3.10或支持GPU的Python 3.8环境,可以按照以下步骤操作。

cd notebook
ln -s Dockerfile38_nv Dockerfile38 -f
make

bnt

构建Notebook镜像,并上传到ACR。

VScode

命令选项

说明

cvs/dvs/svs

创建、删除或查看VSCode。

bvsi

构建VSCode镜像,并上传到ACR。

Hue

命令选项

说明

che/dhe/she

创建、删除或查看Hue实例,以及查看Hue的链接。

bhi

构建Hue镜像,并上传到ACR。

制作镜像

Ray

命令选项

说明

brayi

构建Ray镜像,并上传到ACR。

JAX

命令选项

说明

bjaxi

构建JAX镜像,并上传到ACR。

Httpd

命令选项

说明

bhdi

构建Httpd镜像,并上传到ACR。

chd/dhd/shd

创建、删除或查看Httpd实例,以及查看Httpd的链接。

Hive

命令选项

说明

bhvi

构建Hive镜像,并上传到ACR。

Postgis

命令选项

说明

bpsi

构建Postgis镜像,并上传到ACR。

创建Gateway

命令选项

说明

iemrcli

安装EMRCLI工具。该命令选项仅限在on ACK形态使用。

demrcli

使用EMRCLI工具可以将EMR Hadoop、Spark等环境部署到Gateway机器上,从而使得Gateway机器不仅可以提交AI任务到K8s,还可以操作Hadoop集群进行特征工程、ETL等操作。该命令选项仅限在on ACK形态使用。

其他

Pai-Rec

命令选项

说明

spl

查看Pai-Rec链接。

Milvus

命令选项

说明

sml

可以查看Milvus的链接,是一款开源的向量工具。详情请参见milvus

常用工具

命令选项

说明

buildall

可以构建相关镜像,包括EasyRec、TensorFlow、PyTorch、DeepSpeed、StableDiffusion和Notebook等。

a

查看TensorFlow作业。

b

查看已部署的Serving实例。

c

查看PyTorch作业。

tb

运行TensorBoard,仅限MODELDIR以hdfs://开头的地址。

logs

查看Pod日志。

setnl

为k8s的nodes节点打标签,分别为core和task。此功能在老版本ds上使用, on ack方案不适用

tp

查看Pod使用资源情况。命令为kubectl top pods

tn

查看node资源使用情况。命令为kubectl top nodes

util

查看所有node的CPU和内存的请求或限制情况。

e|clean

清除本地冗余文件。

cleanall

清除本地以及子目录冗余文件。

99

列出所有正在运行的Pod。命令为kubectl get pods

99l

列出所有正在运行的Pod,并为每个Pod生成一个查看Log的链接。

sall

查看多个底座软件的链接、文档等。

image.png

bdci

构建dscontroller镜像,并上传到ACR。

bci

构建customize镜像,并上传到ACR。

bfsi

构建faissserver镜像,并上传到ACR,以及构建dscontroller镜像并上传到ACR。

vc

验证config文件的内容是否存在明显错误。

SFTP

命令选项

说明

cft/dft/sft

创建、删除或查看SFTP实例,以及查看SFTP的链接。

bfti

构建SFTP镜像,并上传到ACR。

常见问题

为什么每个实验需要配置独立Experiments?

为了实现实验隔离,在每个实验中,使用Experiments可以实现完全隔离,包括PV、PVC、镜像等,互不干扰,但仍然可以共享Kubernetes资源池。

allinone.sh设计原则是什么?

通过命令选项,allinone.sh可以将Data Science的所有功能呈现出来,使得用户只需要按照以下步骤操作即可使用:

  1. 填写config文件。

  2. 选择相应的选项。

  3. 获取链接。

该方式最大限度地降低了使用门槛。

dsdemo是否开源?

目前,dsdemo不是开源项目,但是我们会向付费客户提供100%源代码,并签署NDA(Non Disclosure Agreement)协议,以保障客户深入研究Data Science的权利,同时也保障EMR团队的知识产权。

是否可以对EasyRec框架进行修改或添加算法?

可以。您可以获取EasyRec的代码并在本地进行修改,并编译镜像进行训练。您无需重新打包即可进行训练。可以参见ml_on_ds/easyrec/readme文件。

Data Science是否支持离在线混部?

支持。可以对节点池机型打标或设置污点,从物理节点层面隔离离线任务和在线serving的Pod。这样,serving提供的SLB IP的请求只会转发到serving的节点,对延迟没有明显影响。

挂载存储服务是否收费?

建议您在构建Data Science集群时,也开通OSS、OSS-HDFS、NAS等存储服务。这些服务在不存储数据的情况下不收取费用,并且具有很高的灵活性。

是否支持小时级数据训练?

支持。

是否支持流式训练?

支持。可以将数据可以存放在Kafka或DataHub中。

JupyterLab是否支持Jupyter Notebook?

支持。

Notebook是否支持GPU环境,即在Notebook运行一些GPU任务

支持。

是否可以在K8s中运行DeepSpeed任务?

支持。

为什么运行kubectl get pods命令时,部分Pod的状态为Pending?

可以执行命令kubectl describe pods xx , 查看Pending的原因。