TensorFlow Cluster tcm 명령어 사용 가이드
tcm CLI 명령어 사용 권한 인증받기
tcm CLI 명령어 사용 권한을 인증받는 방법은 다음과 같습니다.
TensorFlow Cluster master 서버에 접속하여
tcm
명령어를 실행합니다.root@kym:~# tcm auth
처음 실행 시 tcm CLI 사용 권한이 없으므로 Access Key와 Secret Key를 입력하라는 메시지가 출력됩니다.
ncloud 마이페이지 > 계정관리 > 인증키 관리 페이지에서 Access Key를 복사해 붙여넣으면 Secret Key 프롬프트가 출력됩니다. 동일한 방식으로 Secret Key도 복사해 붙여넣습니다.
인증이 완료되면 다음과 같이 성공 메시지가 출력됩니다. 이후에는 tcm CLI 명령어를 자유롭게 사용할 수 있습니다(서버를 계속 이용 시 재인증 필요 없음).
Authentication Success.
tcm CLI 명령어 종류 알아보기
tcm CLI 명령어 종류를 확인하려면 TensorFlow Cluster 콘솔에 아래와 같이 'tcm' 명령어를 실행합니다.
root@kym:~# tcm
위 명령어를 실행하면 아래와 같이 사용 가능한 명령어 리스트가 나열됩니다.
root@kym:~# tcm
Type: Tcm
String form: <__main__.Tcm object at 0x7f9c6bfb91d0>
Usage: tcm
tcm add-vm
tcm create
tcm delete
tcm history
tcm info
tcm monitor
tcm mount
tcm nas-create
tcm nas-delete
tcm nas-info
tcm nas-volume
tcm rm-vm
tcm start-vm
tcm stop-vm
tcm submit
tcm unmount
이제 명령어 사용법을 하나씩 알아 보겠습니다.
Cluster 생성
Cluster를 생성하기 전 혹은 생성 후에 Cluster 정보를 확인합니다.
root@kym:~# tcm info [NCP TensorFlow Cluster] No clusters. Please create node using 'create' command
아직 생성된 Cluster가 없으므로 'create' 명령어를 사용하여 Cluster를 생성하라는 메시지가 출력됩니다.
tcm create
를 실행합니다. 아래와 같이 사용법이 출력됩니다. [옵션]은 선택 사항입니다. --spec의 기본 옵션 값은 'basic'입니다.Usage: tcm create COUNT [SPEC] tcm create --count COUNT [--spec SPEC]
tcm create 3
혹은tcm create --count 3
을 실행하면 basic 스펙의 서버가 Cluster에 3개 생성됩니다.서버 노드 스펙은
--spec
옵션으로 지정하며 각 스펙은 다음과 같습니다(gpu1, gpu2는 추후 지원 예정).- mini: vCPU 4ea, Memory 16GB, HDD 50GB
- basic: vCPU 8ea, Memory 32GB, HDD 50GB
- high: vCPU 16ea, Memory 32GB, HDD 50GB
- gpu1: GPU 1ea, GPU Mem 24GB, vCPU 4ea, Memory 30GB, SSD 50GB
gpu2: GPU 2ea, GPU Mem 48GB, vCPU 8ea, Memory 60GB, SSD 50GB
tcm create 3
명령어를 실행하여 서버 노드를 3개 만듭니다. 서버 노드 개수는 2대 이상 10대 이하로 실행해 주세요. 추후에add-vm
과 같은 명령어로 Cluster를 확장할 수 있습니다.root@kym:~# tcm create 3 [NCP TensorFlow Cluster] Creating nodes to configure the cluster... [NCP TensorFlow Cluster] Successfully requested. After the cluster is installed, you can check the cluster infomation through the 'tcm info' command. root@kym:~#
서버가 잘 생성되는지 확인하려면 'tcm info' 명령어를 실행합니다. 각 서버 노드의 이름은 master 서버의 이름 + 난수 + 번호로 설정됩니다.
root@kym:~# tcm info +----------------+-------------+------------+---------------------+-------------+--------------+------------+ | Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH | | | | | | | | Connection | +----------------+-------------+------------+---------------------+-------------+--------------+------------+ | kym-zc8mooq4-1 | 539137 | setting up | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | False | | kym-zc8mooq4-2 | 539140 | setting up | 2018-03-12 15:43:50 | 32.00 GB | 10.39.13.235 | False | | kym-zc8mooq4-3 | 539143 | setting up | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | False | +----------------+-------------+------------+---------------------+-------------+--------------+------------+
서버 상태가 'setting up'이라고 출력되고 서버 간의 통신 상태(SSH Connection)는 'False'라고 출력됩니다. 작업 완료까지는 수 분이 소요됩니다. 다시 서버 노드들의 상태를 확인합니다.
+----------------+-------------+---------+---------------------+-------------+--------------+------------+ | Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH | | | | | | | | Connection | +----------------+-------------+---------+---------------------+-------------+--------------+------------+ | kym-zc8mooq4-1 | 539137 | running | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | True | | kym-zc8mooq4-2 | 539140 | running | 2018-03-12 15:43:50 | 32.00 GB | 10.39.13.235 | True | | kym-zc8mooq4-3 | 539143 | running | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | True | +----------------+-------------+---------+---------------------+-------------+--------------+------------+
서버의 상태가 'running'이고, 서버 간의 통신 상태(SSH Connection)이 모두 'True'이면 Cluster 생성이 완료된 상태입니다.
Cluster 서버 노드 추가
Cluster에 서버를 추가하려면 tcm add-vm [서버 대수]
또는 tcm add-vm --count [서버 대수]
명령어를 사용합니다.
root@kym:~# tcm add-vm 1
[NCP TensorFlow Cluster] Successfully requested.
Cluster에 현재 생성되어 있는 서버 노드와 동일한 스펙의 서버가 한 대 더 생성됩니다. tcm add-vm 1
명령은 tcm add-vm --count 1
명령과 동일합니다. tcm add-vm
명령어를 한 번 실행하여 증설이 가능한 최대 서버 대수는 10대입니다.
아래와 같이 추가된 서버 노드의 상태를 확인할 수 있습니다. 서버 상태와 서버 간의 통신 상태가 가용한 상태인지 확인이 필요합니다.
root@kym:~# tcm info
+----------------+-------------+------------+---------------------+-------------+--------------+------------+
| Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH |
| | | | | | | Connection |
+----------------+-------------+------------+---------------------+-------------+--------------+------------+
| kym-zc8mooq4-1 | 539137 | running | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | True |
| kym-zc8mooq4-2 | 539140 | running | 2018-03-12 15:43:50 | 32.00 GB | 10.39.13.235 | True |
| kym-zc8mooq4-3 | 539143 | running | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | True |
| kym-zc8mooq4-4 | 539158 | setting up | 2018-03-12 16:36:18 | 32.00 GB | 10.39.2.214 | False |
+----------------+-------------+------------+---------------------+-------------+--------------+------------+
Cluster 서버 노드 정지
Cluster의 서버 노드들을 정지하는 방법을 알아봅니다.
서버를 한 대씩 혹은 모두 정지시킬 수 있습니다. 서버 인스턴스 번호 대신 all
을 입력하면 모든 서버 노드에 적용됩니다.
Usage: tcm stop-vm INSTANCE_NO
tcm stop-vm --instance-no INSTANCE_NO
root@kym:~# tcm stop-vm all
[NCP TensorFlow Cluster] Successfully requested.
root@kym:~# tcm info
+----------------+-------------+---------------+---------------------+-------------+--------------+------------+
| Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH |
| | | | | | | Connection |
+----------------+-------------+---------------+---------------------+-------------+--------------+------------+
| kym-zc8mooq4-1 | 539137 | shutting down | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | False |
| kym-zc8mooq4-2 | 539140 | shutting down | 2018-03-12 15:43:50 | 32.00 GB | 10.39.13.235 | False |
| kym-zc8mooq4-3 | 539143 | shutting down | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | False |
| kym-zc8mooq4-4 | 539158 | shutting down | 2018-03-12 16:36:18 | 32.00 GB | 10.39.2.214 | False |
+----------------+-------------+---------------+---------------------+-------------+--------------+------------+
Cluster 서버 노드 시작
Cluster의 서버 노드들을 시작하는 방법을 알아봅니다.
정지된 서버를 한 대씩 혹은 모두 시작시킬 수 있습니다. 서버 인스턴스 번호 대신 all
을 입력하면 모든 서버 노드에 적용됩니다.
Usage: tcm start-vm INSTANCE_NO
tcm start-vm --instance-no INSTANCE_NO
root@kym:~# tcm start-vm 539137
success
root@kym:~# tcm info
+----------------+-------------+---------+---------------------+-------------+--------------+------------+
| Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH |
| | | | | | | Connection |
+----------------+-------------+---------+---------------------+-------------+--------------+------------+
| kym-zc8mooq4-1 | 539137 | booting | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | False |
| kym-zc8mooq4-2 | 539140 | stopped | 2018-03-12 15:43:50 | 32.00 GB | 10.39.13.235 | False |
| kym-zc8mooq4-3 | 539143 | stopped | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | False |
| kym-zc8mooq4-4 | 539158 | stopped | 2018-03-12 16:36:18 | 32.00 GB | 10.39.2.214 | False |
+----------------+-------------+---------+---------------------+-------------+--------------+------------+
서버 시작이 완료되면 서버 상태가 'booting'에서 'running'으로 전환되며 수 분이 소요됩니다.
Cluster 서버 노드의 삭제
tcm rm-vm
명령어로 정지된 서버 노드를 삭제할 수 있습니다.
Usage: tcm rm-vm INSTANCE_NO
tcm rm-vm --instance-no INSTANCE_NO
root@kym:~# tcm rm-vm 539140
[NCP TensorFlow Cluster] Successfully requested.
root@kym:~# tcm info
+----------------+-------------+---------+---------------------+-------------+-------------+------------+
| Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH |
| | | | | | | Connection |
+----------------+-------------+---------+---------------------+-------------+-------------+------------+
| kym-zc8mooq4-1 | 539137 | running | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | True |
| kym-zc8mooq4-3 | 539143 | stopped | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | False |
| kym-zc8mooq4-4 | 539158 | stopped | 2018-03-12 16:36:18 | 32.00 GB | 10.39.2.214 | False |
+----------------+-------------+---------+---------------------+-------------+-------------+------------+
서버 노드가 2대인 경우 더 이상의 삭제는 되지 않습니다. 이 경우 tcm stop-vm
으로 모든 서버를 정지시킨 후에 tcm delete
명령어로 Cluster를 삭제해야 합니다.
Cluster 삭제
Cluster를 삭제하려면 tcm delete
명령어를 사용합니다. 모든 서버 노드들이 정지 상태에서만 동작합니다.
Usage: tcm delete
root@kym:~# tcm delete
[NCP TensorFlow Cluster] VM is powered on. Please shut down the VM.
root@kym:~# tcm info
+----------------+-------------+---------+---------------------+-------------+-------------+------------+
| Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH |
| | | | | | | Connection |
+----------------+-------------+---------+---------------------+-------------+-------------+------------+
| kym-zc8mooq4-1 | 539137 | running | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | True |
| kym-zc8mooq4-3 | 539143 | running | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | True |
| kym-zc8mooq4-4 | 539158 | running | 2018-03-12 16:36:18 | 32.00 GB | 10.39.2.214 | True |
+----------------+-------------+---------+---------------------+-------------+-------------+------------+
root@kym:~# tcm stop-vm all
[NCP TensorFlow Cluster] Successfully requested.
root@kym:~# tcm info
+----------------+-------------+---------------+---------------------+-------------+-------------+------------+
| Server Name | Instance No | Status | Create Date | Memory Size | Private IP | SSH |
| | | | | | | Connection |
+----------------+-------------+---------------+---------------------+-------------+-------------+------------+
| kym-zc8mooq4-1 | 539137 | shutting down | 2018-03-12 15:43:45 | 32.00 GB | 10.39.3.97 | False |
| kym-zc8mooq4-3 | 539143 | shutting down | 2018-03-12 15:43:55 | 32.00 GB | 10.39.3.202 | False |
| kym-zc8mooq4-4 | 539158 | shutting down | 2018-03-12 16:36:18 | 32.00 GB | 10.39.2.214 | False |
+----------------+-------------+---------------+---------------------+-------------+-------------+------------+
root@kym:~# tcm delete
[NCP TensorFlow Cluster] Successfully requested.
root@kym:~# tcm info
[NCP TensorFlow Cluster] No clusters. Please create node using 'create' command
Cluster 공용 스토리지 생성
Cluster master 서버의 local 스토리지가 부족하거나 서버 노드들이 학습 데이터를 공유할 수 있게 하려는 경우 NAS 스토리지를 생성할 수 있습니다.
NAS 스토리지의 이름은 필수 입력 값이고, volume 옵션의 기본값은 500GB입니다. volume 옵션값은 스토리지(NAS)의 size(GB)입니다. 지원하는 용량은 500~10,000GB이며, 100GB 단위로 추가할 수 있습니다.
Usage: tcm nas-create NAME [VOLUME]
tcm nas-create --name NAME [--volume VOLUME]
root@kym:~# tcm nas-create train
success
root@kym:~# tcm nas-info
+----------------+-------------+--------+-----------+-----------+--------------+------------------------------+------------------------------------------+
| Name | Instance No | Status | Size | Used Size | Use Ratio(%) | Mount Info | ACL Instance List |
+----------------+-------------+--------+-----------+-----------+--------------+------------------------------+------------------------------------------+
| n000327_train | 539170 | CREAT | 500.00 GB | 272.00 KB | 0.0 | 10.250.48.15:/n000327_train | [] |
+----------------+-------------+--------+-----------+-----------+--------------+------------------------------+------------------------------------------+
'train'이라는 500GB 사이즈의 NAS 스토리지가 생성된 것을 확인할 수 있습니다.
Cluster 공용 스토리지 마운트
생성된 NAS 스토리지를 모든 서버 노드에 동시에 마운트합니다. 하나의 Cluster는 하나의 NAS 스토리지가 마운트 가능하고 master 서버를 비롯한 서버 노드의 마운트 경로는 /mnt/nas로 고정됩니다.
Usage: tcm mount NAS_INSTANCE_NO
tcm mount --nas-instance-no NAS_INSTANCE_NO
nas-info
명령어로 생성된 'nas instance no'를 마운트 명령어에 인자값으로 넣어주십시오.
root@kym:~# tcm mount 539170
[NCP TensorFlow Cluster] Successfully requested.
root@kym:~# tcm nas-info
+----------------+-------------+--------+-----------+-----------+--------------+------------------------------+------------------------------------------+
| Name | Instance No | Status | Size | Used Size | Use Ratio(%) | Mount Info | ACL Instance List |
+----------------+-------------+--------+-----------+-----------+--------------+------------------------------+------------------------------------------+
| n000327_train | 539170 | CREAT | 500.00 GB | 348.00 KB | 0.0 | 10.250.48.15:/n000327_train | ['539104', '539161', '539164', '539167'] |
+----------------+-------------+--------+-----------+-----------+--------------+------------------------------+------------------------------------------+
ACL Instance에 Cluster master 서버와 서버 노드들이 자동으로 구성된 것을 확인할 수 있습니다.
아래와 같이 ssh root@[서버 노드의 사설 IP] 명령어
로 서버 노드에 잘 마운트되었는지 확인이 가능합니다. 기본적으로 Cluster master 서버의 공용키가 Cluster 생성 시 서버 노드들에 자동으로 복제되기 때문에 원격 명령어를 사용하실 수 있습니다.
root@kym:~# ssh root@10.39.3.232 'df -h'
Warning: Permanently added '10.39.3.232' (ECDSA) to the list of known hosts.
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 8.8M 3.2G 1% /run
/dev/xvda1 48G 5.2G 40G 12% /
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
tmpfs 3.2G 0 3.2G 0% /run/user/1000
10.250.48.15:/n000327_train 500G 320K 500G 1% /mnt/nas
tmpfs 3.2G 0 3.2G 0% /run/user/0
Cluster 공용 스토리지 언마운트
다음 명령어로 Cluster master 서버 및 서버 노드들에 NAS 스토리지를 동시에 언마운트할 수 있습니다.
Usage: tcm unmount NAS_INSTANCE_NO
tcm unmount --nas-instance-no NAS_INSTANCE_NO
언마운트와 동시에 NAS ACL이 자동 해제되므로 주의하시기 바랍니다.
Cluster 공용 스토리지 삭제
NAS 공용 스토리지를 삭제하며, unmount
명령어처럼 언마운트와 동시에 NAS ACL이 자동 해제됩니다.
Usage: tcm nas-delete NAS_INSTANCE_NO
tcm nas-delete --nas-instance-no NAS_INSTANCE_NO
Cluster 공용 스토리지 볼륨 변경
NAS 스토리지의 볼륨 사이즈를 변경할 수 있습니다. 볼륨 사이즈를 500~10,000GB 사이로 변경할 수 있으며, 변경 단위는 100GB입니다.
Usage: tcm nas-volume NAS_INSTANCE_NO SIZE
tcm nas-volume --nas-instance-no NAS_INSTANCE_NO --size SIZE
Cluster JOB Submit(제출)
본 상품은 TensorFlow의 'Distributed Tensorflow' 기능에 맞는 Cluster 구조입니다. python 코드를 Distribute Tensorflow에서 제공하는 문법과 형식을 따라 작성해야 정상적으로 동작합니다. 제출 전에 반드시 모든 노드의 서버 노드 간 접속상태(SSH Connection)가 'True'임을 확인하십시오.
[PS_NUM]은 파라미터 서버의 개수를 지정하는 옵션입니다. Default값은 1이고 사용자가 워커 서버 수보다 작은 수로 지정할 수 있습니다. 이 경우 Cluster는 자동으로 사용자 프로그램에 변경된 Cluster 스펙을 전달합니다(프로그램이 Cluster 인자값을 받는 경우에 해당). 기본적으로 Cluster의 모든 서버 노드는 워커 서버로 동작합니다.
공용 스토리지(nas)의 마운트 기능을 사용하면 분산 환경 실행 시 데이터를 공용으로 사용 가능합니다.
Usage: tcm submit FILE_PATH [PS_NUM] [FORCE] [ARGS ...]
tcm submit --file-path FILE_PATH [--ps-num PS_NUM] [--force FORCE] [ARGS ...]
다음은 기본으로 제공되는 TensorFlow Distriuted 예제를 제출하는 예입니다.
root@kym:~# tcm submit /home/ncp/workspace/DistributedTensorFlow.py
root@kym:~# [NCP TensorFlow Cluster] Successfully requested. You can check the log using 'tcm monitor' command.
[FORCE] 옵션을 True로 설정하면 워커 서버들의 실행 여부를 master 서버 노드에서 체크하고, 모두 종료 시 파라미터 서버들이 Job을 자동으로 정지시킵니다.
BackGound Job으로 실행되기 때문에 실행 후 콘솔 프롬프트로 이동되며, 로그는 다음에 설명할 tcm monitor
명령어로 확인이 가능합니다.
Cluster JOB 로그 보기
Usage: tcm monitor
TensorFlow 학습 로그를 tailing하여 연속적으로 보여줍니다. 중간에 빠져나오려면 Ctrl + C를 누르세요.
각 서버 노드의 로그는 Cluster master 서버의 /home/ncp/ncp.log에 집계되어 저장됩니다.
root@kym:~# tcm monitor
[NCP TensorFlow Cluster] If you want to finish monitoring, press Ctr+c
2018-03-12 18:26:54.444489: I tensorflow/core/distributed_runtime/master_session.cc:998] Start master session f3f069b8690ca808 with config: device_filters: "/job:ps" device_filters: "/job:worker/task:0" allow_soft_placement: true
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting /home/ncp/mnist-data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting /home/ncp/mnist-data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting /home/ncp/mnist-data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting /home/ncp/mnist-data/t10k-labels-idx1-ubyte.gz
Worker 0: Initializing session...
Worker 0: Session initialization complete.
Training begins @ 1520846815.213741
1520846815.350583: Worker 0: training step 1 done (global step: 0)
1520846815.378844: Worker 0: training step 2 done (global step: 0)
1520846815.405878: Worker 0: training step 3 done (global step: 0)
1520846815.428620: Worker 0: training step 4 done (global step: 1)
1520846815.449924: Worker 0: training step 5 done (global step: 1)
1520846815.470958: Worker 0: training step 6 done (global step: 1)
1520846815.495449: Worker 0: training step 7 done (global step: 1)
1520846815.516172: Worker 0: training step 8 done (global step: 2)
1520846815.540724: Worker 0: training step 9 done (global step: 2)
1520846815.565506: Worker 0: training step 10 done (global step: 2)
------------------------------ 중 략 ------------------------------
1520846960.827992: Worker 0: training step 3031 done (global step: 3000)
Training ends @ 1520846960.828057
Training elapsed time: 145.614315 s
After 3000 training step(s), validation cross entropy = 812.873
##########################################################################################
[NCP TensorFlow Cluster] FINISH DISTRIBUTE JOB
[NCP TensorFlow Cluster] IF YOU WANT TO FINISH MONITORING, PRESS CTR+C
[NCP TensorFlow Cluster] TOTAL TIME : 163.34 seconds
##########################################################################################
Cluster JOB 이력 정보 보기
Usage: tcm history
다음과 같이 작업 제출 이력을 확인할 수 있으며, 현재 실행 중인 Job의 상태를 확인할 수 있습니다.
root@kym:~# tcm history
+---------------------+----------------------------------------------+--------+---------------------+-------------+
| Submit Time | File Name | Status | End Time | Total Time |
| | | | | (sec) |
+---------------------+----------------------------------------------+--------+---------------------+-------------+
| 2018-03-12 18:26:39 | /home/ncp/workspace/DistributedTensorFlow.py | Finish | 2018-03-12 18:29:22 | 163.34 |
| 2018-03-12 18:37:48 | /home/ncp/workspace/DistributedTensorFlow.py | submit | None | None |
+---------------------+----------------------------------------------+--------+---------------------+-------------+