走近深度学习,认识MoXing:运行与公共组件

举报
云上AI 发表于 2018/08/22 10:28:56 2018/08/22
【摘要】 本文为MoXing系列文章第六篇,主要介绍MoXing运行及公共组件。

MoXing中运行仅需执行一个API,即mox.run。mox.run中log_dir主要用来输出TensorBoard的Summary文件和checkpoint文件,checkpoint_path用来指定载入checkpoint的路径。mox.run对checkpoint文件的载入优先级如下:

·    当log_dir中存在checkpoint时,无视checkpoint_path,从log_dir中载入checkpoint。如果当前模式为mox.ModeKeys.TRAIN,则将新的checkpoint保存在log_dir中。

·    当log_dir中不存在checkpoint时,从checkpoint_path中载入checkpoint。如果当前当前模式为mox.ModeKeys.TRAIN,则将新的checkpoint保存在log_dir中。

·    当log_dir和checkpoint_path中都不存在checkpoint时,如果当前模式为mox.ModeKeys.TRAIN,则初始化所有变量并将新的checkpoint保存在log_dir中。如果当前不是mox.ModeKeys.TRAIN,则抛出异常(非训练模式下必须提供checkpoint)


启动一个训练作业时,发现很快就结束了,控制台也没有打印任何与loss或是accuracy相关的信息。输出日志信息可能如下:

INFO:tensorflow:Restoring parameters from s3://bucket_name/log/model.ckpt-xxx

INFO:tensorflow:Saving checkpoints for xxx into s3://bucket_name/log

这是因为训练开始时,在用户指定的输出日志路径(train_url或是log_dir)中已经存在了checkpoint,例如一个训练到1000步的checkpoint文件:model.ckpt-1000,而用户启动的训练作业指定的训练步数也是1000步,此时就会认为不需要再训练,就直接退出了。

如果想在原有checkpoint基础上继续训练,可以将训练步数指定到更大的步数。如果想重新训练,可以将原来的checkpoint文件删除或者指定一个全新的输出日志路径。


1  LARS训练ResNet-50

https://github.com/huaweiyun7759/backup/new/master

运行参数

--batch_size=64

--max_number_of_steps=28800

--log_every_n_steps=1

--num_gpus=4

--save_summaries_steps=4

--save_interval_secs=300

--run_mode=train

--clone_on_cpu=False

--data_format=NCHW

--dataset_name=imagenet

--model_name=resnet_v1_50

--sync_replicas=False

--log_dir=${LOG_DIR}

--data_url=${DATASET_DIR}

--ps_hosts=${PS_HOSTS}

--worker_hosts=${WORKER_HOSTS}

--job_name=${JOB_NAME}

--task_index=${TASK_INDEX}


2  DGC训练ResNet-50

以下代码可以训练一个任意的MoXing内置模型,只需要添加上一些运行参数,即可将DGC应用起来

https://github.com/huaweiyun7759/backup/new/master/MOXING%20CHAPTER%205

运行参数

--model_name=resnet_v1_50

--batch_size=64

--max_epochs=90

--save_summaries_steps=60

--save_interval_secs=600

--dataset_name=imagenet

--data_format=NCHW

--learning_rate_strategy='5:0.001->0.4,30:0.4,60:0.04,80:0.004,90:0.0004'

--lr_warmup_strategy=exponential

--num_gpus=4

--run_mode=TRAIN

--variable_update=distributed_replicated_dgc

--dgc_sparsity_strategy=0.75,0.9375,0.984375,0.996,0.999

--dgc_momentum_type=vanilla

--dgc_momentum=0.9

--dgc_momentum_factor_masking=True

--dgc_total_samples=1281167

--log_every_n_steps=10

--momentum=0

--train_url=${TRAIN_URL}

--data_url=${DATA_URL}

--ps_hosts=${PS_HOSTS}

--worker_hosts=${WORKER_HOSTS}

--job_name=${JOB_NAME}

--task_index=${TASK_INDEX}


3  MoXing-公共组件

MoXing提供了一些公共组件,可以同时在TensorFlowMXNet下使用。以下三种语句都可以应用这些公共组件:

·    import moxing as mox

·    import moxing.mxnet as mox

·    import moxing.tensorflow as mox


3.1 版本查询

版本号mox.__version__

git-commit版本号mox.__git_version__

OBS-Python-SDK版本号mox.__obs_version__


3.2 文件操作

MoXing中提供了一套文件对象APImox.file,可以用来读写本地文件,同时也支持OBS文件系统。

读取一个本地文件mox.file.read('/tmp/local_file.txt')

追加一个OBS文件

mox.file.append('s3://bucket_name/obs_file.txt', '\nend of file.')

以二进制写模式打开一个本地文件

f = mox.file.File('/tmp/local_file.txt', 'wb')

f.read()

f.close()

以二进制可读可写模式打开一个OBS文件

f = mox.file.File('s3://bucket_name/obs_file.txt', 'rb+')

f.read()

f.close()

当读取OBS文件时,实际调用的是HTTP连接读去网络流,注意要记得在读取完毕后将文件关闭。为了防止忘记文件关闭操作,推荐使用with语句,在with语句退出时会自动调用mox.file.File对象的close()方法:

with mox.file.File('s3://bucket_name/obs_file.txt', 'r') as f:

data = f.readlines()

上传一个本地文件到OBS:

mox.file.copy('/tmp/local_file.txt', 's3://bucket_name/obs_file.txt')

下载一个OBS文件到本地:

mox.file.copy('s3://bucket_name/obs_file.txt', '/tmp/local_file.txt')


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200