ファイル
main.py
まず main.py
です.
import pytz
from datetime import datetime
from utils import parse_args
from pprint import pprint
def main():
params = parse_args()
print()
pprint(params)
print()
for key in params:
print(key, params[key], type(params[key]))
if __name__ == "__main__":
start = datetime.now(pytz.timezone('Asia/Tokyo'))
print()
print("Train Started at {}".format(start))
print()
main()
print()
print("Train Started at {}".format(start))
finish = datetime.now(pytz.timezone('Asia/Tokyo'))
print("Train Finished at {}".format(finish))
print("Elapsed Time: {}".format(finish - start))
utils.py
続いて utils.py
です.
import argparse
import torch
import os
import json
def parse_args():
parser = argparse.ArgumentParser(
description='この python プログラムについての説明 -h または --help 時に表示'
)
# デフォルトを指定する場合
parser.add_argument('--comment', default='', help='実行する際のコメントを残す')
# 好きな順序で指定する場合は "--name", required=True とする.
# 型を指定する場合
parser.add_argument('--epoch', type=int, required=True, help='epoch 数')
# boolean で指定する場合
# 指定されていると True そうでないときは False
parser.add_argument('--local', action='store_true', help='local かどうか')
# 指定する内容を選択肢の中から選択する場合
parser.add_argument('--optimizer', choices=['Adam', 'SGD', 'AdaGrad'])
parser.add_argument("--output_dir", default="outputs", type=str)
# 引数を解析
args = parser.parse_args()
workspace_dir = os.path.join("/var", "www", "workspace", "clip-image-search")
output_dir = os.path.join(workspace_dir, args.output_dir)
os.makedirs(output_dir, exist_ok=True)
# args の保存
args_dict = vars(args)
params_path = os.path.join(output_dir, "params.json")
with open(params_path, "w") as f:
json.dump(args_dict, f, indent=4)
# args から params を作成
with open(params_path, "r") as f:
params = json.load(f)
params["device"] = 'cuda' if torch.cuda.is_available() else 'cpu'
return params
command.sh
続いて command.sh
です.
# フルで指定する場合
python main.py --comment=message --epoch=10 --local --optimizer=Adam
# required=True だけ指定する場合
python main.py --epoch=10
出力
help
プログラムの help を出力すると以下のように出力される.
root@081b783a2465:/var/www/workspace# python main.py -h
Train Started at 2023-01-29 22:09:57.270306+09:00
usage: main.py [-h] [--comment COMMENT] --epoch EPOCH [--local] [--optimizer {Adam,SGD,AdaGrad}]
この python プログラムについての説明 -h または --help 時に表示
optional arguments:
-h, --help show this help message and exit
--comment COMMENT 実行する際のコメントを残す
--epoch EPOCH epoch 数
--local local かどうか
--optimizer {Adam,SGD,AdaGrad}
実行結果
sh command.sh
として main.py
を実行すると以下のように出力される.
フルで指定した場合
root@081b783a2465:/var/www/workspace/cliplearn# sh command.sh
Train Started at 2023-01-29 22:12:38.957051+09:00
{'comment': 'message',
'device': 'cuda',
'epoch': 10,
'local': True,
'optimizer': 'Adam'}
comment message <class 'str'>
epoch 10 <class 'int'>
local True <class 'bool'>
optimizer Adam <class 'str'>
device cuda <class 'str'>
Train Started at 2023-01-29 22:12:38.957051+09:00
Train Finished at 2023-01-29 22:12:38.977580+09:00
Elapsed Time: 0:00:00.020529
required=True
だけ指定する場合
root@081b783a2465:/var/www/workspace/cliplearn# sh command.sh
Train Started at 2023-01-29 22:12:39.524942+09:00
{'comment': '',
'device': 'cuda',
'epoch': 10,
'local': False,
'optimizer': None}
comment <class 'str'>
epoch 10 <class 'int'>
local False <class 'bool'>
optimizer None <class 'NoneType'>
device cuda <class 'str'>
Train Started at 2023-01-29 22:12:39.524942+09:00
Train Finished at 2023-01-29 22:12:39.528479+09:00
Elapsed Time: 0:00:00.003537
params の保存
作成した params
を保存する場合は
import os
import json
params_path = os.path.join("/var", "www", "workspace", "kwags.json")
with open(params_path, 'w') as f:
json.dump(params, f, indent=4)
とすればいい.