走近深度学习,认识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提供了一些公共组件,可以同时在TensorFlow和MXNet下使用。以下三种语句都可以应用这些公共组件:
· 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中提供了一套文件对象API:mox.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')
- 点赞
- 收藏
- 关注作者
评论(0)