argparse ๋ชจ๋์ ์ฌ์ฉํ์ฌ pytorch ๋ชจ๋ธ์ depolyํ๋ ค๊ณ ํฉ๋๋ค.
์ฑ์ ์ ์ธ๋ argparse ๋ชจ๋์ด gunicorn์ ์ธ์๋ฅผ ๋์ฒดํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
usage: gunicorn [-h] [--mode MODE] [--batch_size BATCH_SIZE] [--warmup WARMUP]
[--early_stop EARLY_STOP] [--seed SEED] [--t_total] [--lr LR]
[--lr_decay_epochs LR_DECAY_EPOCHS]
[--lr_decay_rate LR_DECAY_RATE]
[--weight_decay_rate WEIGHT_DECAY_RATE] [--bert_lr BERT_LR]
[--num_epochs NUM_EPOCHS] [--model_dir MODEL_DIR]
[--model_path MODEL_PATH] [--num_workers NUM_WORKERS]
[--train_dataset TRAIN_DATASET] [--eval_dataset EVAL_DATASET]
[--test_dataset TEST_DATASET] [--bert_low_case BERT_LOW_CASE]
[--bert_type BERT_TYPE] [--bert_hidden_size BERT_HIDDEN_SIZE]
[--bert_dropout BERT_DROPOUT]
[--bert_mention_max_len BERT_MENTION_MAX_LEN]
[--bert_max_len BERT_MAX_LEN]
[--bert_char_max_len BERT_CHAR_MAX_LEN]
[--bert_entity_threshold BERT_ENTITY_THRESHOLD]
[--bert_freeze] [--bert_threshold BERT_THRESHOLD]
[--bert_adam] [--enhance_mention] [--interaction]
[--context_dropout CONTEXT_DROPOUT]
[--mention_dropout MENTION_DROPOUT]
[--rnn_hidden_size RNN_HIDDEN_SIZE]
[--rnn_num_layers RNN_NUM_LAYERS] [--rnn_dropout RNN_DROPOUT]
[--rnn_num_dirs RNN_NUM_DIRS]
[--cnn_embedding_dim CNN_EMBEDDING_DIM]
[--cnn_output_dim CNN_OUTPUT_DIM] [--cnn_filters CNN_FILTERS]
[--hierarchy_alpha HIERARCHY_ALPHA]
gunicorn: error: unrecognized arguments: -w 1 -b 0.0.0.0:3101 --reload -t 500 api:app
์ ์น์
์ ํํธ๋ ์ฑ์ ๋ชจ๋ธ ๋งค๊ฐ๋ณ์์
๋๋ค.
๊ฐ์ฌํฉ๋๋ค~
argparse
์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ณ CLI๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น?
Gunicorn ํธ์ถ parse_args
์์ฒด ์ธ์คํด์ค์์ argparse
. ๋ค๋ฅธ ์์
์ ์ํํ๋ ์ฌ์ฉ์ ์ง์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๊ฑฐ๋ Gunicorn์ด ์์๋ ํ ํธ์ถํ๋ ๊ฒฝ์ฐ sys.argv
๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ณ ์ ํ ์ธ์๋ฅผ parse_args
์ ๋ฌํ ์ ์์ต๋๋ค.
https://docs.python.org/3/library/argparse.html#the -parse-args-method
argparse
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ CLI๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น?Gunicorn ํธ์ถ
parse_args
์์ฒด ์ธ์คํด์ค์์argparse
. ๋ค๋ฅธ ์์ ์ ์ํํ๋ ์ฌ์ฉ์ ์ง์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๊ฑฐ๋ Gunicorn์ด ์์๋ ํ ํธ์ถํ๋ ๊ฒฝ์ฐsys.argv
๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ณ ์ ํ ์ธ์๋ฅผparse_args
์ ๋ฌํ ์ ์์ต๋๋ค.https://docs.python.org/3/library/argparse.html#the -parse-args-method
๋ต์ฅ์ ๋ณด๋ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. args = parser.parse_args(sys.argv)
์ ๊ฐ์ ๋ด APP์์ argparse ๋ชจ๋์ ์ฌ์ฉํ๋ฉด gunicorn์ ์ธ์๊ฐ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
args, unknown = parser.parse_known_args()
๋ก ๋ฐ๊พธ๋ ค๊ณ ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ๋ฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค ~
๊ทธ๋ฌ๋ฉด ๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ ์ ์์ต๋๊น? ๊ณ ์ ํ ๋ช ๋ น์ค ์ค์์น์ gunicorn ์ค์์น๋ฅผ ํจ๊ป ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฐ ๋์์ด ํ์ํ์ญ๋๊น?
๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ต์ฅ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
args = parser.parse_args(sys.argv)
์ ๊ฐ์ ๋ด APP์์ argparse ๋ชจ๋์ ์ฌ์ฉํ๋ฉด gunicorn์ ์ธ์๊ฐ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.args, unknown = parser.parse_known_args()
๋ก ๋ฐ๊พธ๋ ค๊ณ ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ๋ฉ๋๋ค.๊ฐ์ฌํฉ๋๋ค ~