-
Notifications
You must be signed in to change notification settings - Fork 0
/
search.json
212 lines (212 loc) · 42.5 KB
/
search.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
[
{
"objectID": "index.html",
"href": "index.html",
"title": "UBAI GUIDE BOOK",
"section": "",
"text": "UBAI Cluster를 사용하기 위한 가이드 북입니다.\n아래의 Chapter 순서에 따라 진행해보세요. \nUBAI Cluster\nUBAI Cluster의 기본적인 개념 및 스펙에 대해 설명합니다.\nChapter1. 계정 생성\nUBAI 사용을 위한 계정 생성 단계입니다.\nChapter2. 접속 방법\nUBAI에 접속합니다.\nChapter3. 환경 구축\n원활한 프로젝트 수행을 위해, 환경 구축을 돕습니다.\nChpater4. Python 실행\nPython 프로젝트를 수행해봅니다.\nChpater5. 파일 관리\n프로젝트 수행을 위한 파일 다운로드 및 업로드 방법을 소개합니다.\n\nUBAI GUIDE BOOK에서는 UBAI 사용을 위한 전반적인 내용을 소개합니다.\n해당 자료는 서울시립대학교 도시과학빅데이터·AI연구원 소유물입니다.",
"crumbs": [
"<span class='chapter-number'>1</span> <span class='chapter-title'>MAIN</span>"
]
},
{
"objectID": "UBAI Cluster.html",
"href": "UBAI Cluster.html",
"title": "UBAI Cluster",
"section": "",
"text": "UBAI\n도시과학빅데이터·AI연구원(이하 UBAI)은 사용자에게 고성능컴퓨팅(HPC) 자원을 제공합니다.\n사용자는 Slurm을 통해 독점적인 자원을 할당받고 AI학습 및 추론, 연산, 시뮬레이션 등의 작업(Job)을 수행할 수 있습니다.\n💡 Slurm\nUBAI는 여러 명의 사용자에게 UBAI Cluster를 제공하기 위해 Slurm을 사용합니다.\nSlurm에 대해 보다 자세한 설명 및 사용법을 원하시는 분은 Slurm페이지로 이동하세요.\n💡 Visual Studio Code\nUBAI는 VScode를 이용한 서버 접속 방법을 제공합니다.\n서버 접속에 앞서 VScode의 이용법을 알고 있어야 합니다. VScode는 홈페이지에서 다운받을 수 있으며, VScode 사용과 관련한 자세한 사항은 공식 문서를 참고하세요.",
"crumbs": [
"<span class='chapter-number'>2</span> <span class='chapter-title'>UBAI Cluster</span>"
]
},
{
"objectID": "UBAI Cluster.html#ubai",
"href": "UBAI Cluster.html#ubai",
"title": "UBAI Cluster",
"section": "",
"text": "Slurm은 다양한 사용자들의 다양한 요구를 수용하고(Job Submit), \n각 사용자들의 작업을 스케줄링하며(Task Scheduling), \n자원을 관리(Resource Management)하는 Linux 유틸리티 입니다.\n\n\n\nVisual Studio Code(이하 VScode)는 Microsoft에서 오픈소스로 개발한 소스 코드 에디터입니다. \nMacOS, Linux, Windows와 같은 다양한 운영체제와 다양한 확장 기술을 지원하여, \n전 세계적으로 널리 활용되고 있습니다.",
"crumbs": [
"<span class='chapter-number'>2</span> <span class='chapter-title'>UBAI Cluster</span>"
]
},
{
"objectID": "UBAI Cluster.html#partition",
"href": "UBAI Cluster.html#partition",
"title": "UBAI Cluster",
"section": "Partition",
"text": "Partition\nSlurm에서 Partition은 특정 자원 그룹을 정의하는 논리적 단위입니다.\n사용자들이 작업을 제출할 때 특정 Partition을 지정하여 자원을 할당받을 수 있습니다.\nPartition 목록은 아래와 같습니다.\n\n\n\n\n\n\n\n\n\n\n\n\n\nPartition\n# of Nodes\n# of Cores/node\nCPU\nGPU/node\nMemory/node\nSSD\nNote\n\n\n\n\ngpu1\n13\n48\nIntel Xeon Gold 6240R\nRTX3090 (4EA)\n768GB\n2TB\n*\n\n\nedu1\n5\n48\nIntel Xeon Gold 6240R\nA10 (4EA)\n768GB\n2TB\n*\n\n\ncpu1\n30\n48\nIntel Xeon Gold 6240R\nNone\n768GB\n2TB\n*\n\n\ngpu2\n10\n56\nIntel Xeon Gold 6348R\nA10 (8EA)\n1024GB\n2TB\n*\n\n\ngpu3\n11\n56\nIntel Xeon Gold 6348R\nA10 (4EA)\n1024GB\n2TB\n*\n\n\ngpu4\n29\n56\nIntel Xeon Gold 6348R\nA6000 (4EA)\n1024GB\n2TB\n*\n\n\ngpu5\n6\n64\nIntel Xeon Platinum-8358\nA6000 (4EA)\n1024GB\n2TB\n*\n\n\n\n\n※ UBAI는 총 106대의 노드, 총 5,586개의 CPU 코어와, 그래픽카드 RTX3090 52대, A10 144대, A6000 140대를 제공합니다.\n\n\nTerminal에서 Partition 목록을 확인하기 위해서는 다음과 같은 명령어를 입력하세요.\n입력 명령어\n\nsinfo -o \"%10P %5D %14F %4c %14G %N\"\n\n출력 예시\n\nPARTITION NODES NODES(A/I/O/T) CPUS GRES NODELIST\ngpu1 13 10/3/0/13 48 gpu:rtx3090:4 n[001-013]\ncpu1 35 16/19/0/35 48 (null) n[014-048]\nhgx 1 0/0/1/1 48 gpu:hgx:8 n050\ngpu2 32 26/6/0/32 56 gpu:a10:4 n[051-070,073-080,083-086]\ncpu2 14 14/0/0/14 56 (null) n[087-100]\ncpu3 6 4/2/0/6 64 (null) n[101-106]\ntest 4 0/4/0/4 56 gpu:a10:4 n[071-072,081-082]\n\n모든 사용자는 모든 파티션에 대해 MaxJobs(최대 수행 작업 수) 10, MaxSubmit(최대 작업 제출 수) 20, MaxWall(작업 당 최대 수행 시간) 2일로 제한이 걸려있습니다.\n\n\n\nPartition\nMaxJobs\nMaxSubmit\nMaxWall\n\n\n\n\n*\n10\n20\n2-00:00:00",
"crumbs": [
"<span class='chapter-number'>2</span> <span class='chapter-title'>UBAI Cluster</span>"
]
},
{
"objectID": "UBAI Cluster.html#사사의-글-안내",
"href": "UBAI Cluster.html#사사의-글-안내",
"title": "UBAI Cluster",
"section": "사사의 글 안내",
"text": "사사의 글 안내\n📌 도시과학빅데이터AI연구원의 슈퍼컴퓨터 자원을 이용하신 분들은 논문, 프로젝트, 통계 등 실적에 다음과 같이 연구원 사사를 적어주시기 바랍니다.\n(국문) 본 논문은 서울시립대학교 도시과학빅데이터AI연구원의 슈퍼컴퓨팅 자원을 지원 받아 수행되었습니다.\n(영문) The authors acknowledge the Urban Big data and AI Institute of the University of Seoul supercomputing resources (http://ubai.uos.ac.kr) made available for conducting the research reported in this paper.",
"crumbs": [
"<span class='chapter-number'>2</span> <span class='chapter-title'>UBAI Cluster</span>"
]
},
{
"objectID": "계정 생성.html",
"href": "계정 생성.html",
"title": "Chapter1. 계정 생성",
"section": "",
"text": "1. 계정 신청\nUBAI 홈페이지에 접속하여 슈퍼 컴퓨팅 사용 신청 방법을 확인합니다.\n이후 사용 신청서를 다운 받아 관리자 메일([email protected])에 제출합니다.",
"crumbs": [
"<span class='chapter-number'>3</span> <span class='chapter-title'>Chapter1. 계정 생성</span>"
]
},
{
"objectID": "계정 생성.html#키파일-저장",
"href": "계정 생성.html#키파일-저장",
"title": "Chapter1. 계정 생성",
"section": "2. 키파일 저장",
"text": "2. 키파일 저장\n첨부파일을 통해 저장한 키파일(사용자ID.pem)을 C:\\User\\{사용자이름폴더}\\.ssh\\의 경로로 이동합니다.\n\n\n※ 만일 .ssh폴더가 없는 경우, Chapter2. 접속 방법의 .ssh 폴더 생성 순서를 우선 진행하세요.",
"crumbs": [
"<span class='chapter-number'>3</span> <span class='chapter-title'>Chapter1. 계정 생성</span>"
]
},
{
"objectID": "접속 방법.html",
"href": "접속 방법.html",
"title": "Chapter2. 접속 방법",
"section": "",
"text": "1. Remote-SSH 설치\nVScode를 이용하여 Remote-SSH 접속을 합니다. 이를 위해 SSH 접속에 필요한 환경 설정이 필요합니다.\n💡 SSH\nSSH 접속은 다양한 방법이 있지만, VScode를 통한 연결 방법이 가장 쉽고 정확합니다.\n따라서 VScode를 자신의 운영체제에 맞게 설치하시고 Extension를 통해 Remote-SSH 확장 프로그램을 설치하셔야 합니다.",
"crumbs": [
"<span class='chapter-number'>4</span> <span class='chapter-title'>Chapter2. 접속 방법</span>"
]
},
{
"objectID": "접속 방법.html#remote-ssh-설치",
"href": "접속 방법.html#remote-ssh-설치",
"title": "Chapter2. 접속 방법",
"section": "",
"text": "SSH란 원격으로 다른 컴퓨터에 접속하여 \ncommand에 기반한 작업을 수행하도록 돕는 도구입니다.",
"crumbs": [
"<span class='chapter-number'>4</span> <span class='chapter-title'>Chapter2. 접속 방법</span>"
]
},
{
"objectID": "접속 방법.html#config-파일-수정",
"href": "접속 방법.html#config-파일-수정",
"title": "Chapter2. 접속 방법",
"section": "2. Config 파일 수정",
"text": "2. Config 파일 수정\n\nRemote-SSH를 설치했다면, (CTRL + P)를 입력하고 나오는 검색(search) 칸에 >remote-ssh : open ssh configuration를 입력합니다. \n\n\n※ 해당 화면은 .ssh폴더가 없는 경우, .ssh폴더와 config파일을 같이 생성합니다. .ssh폴더가 있는 경우에는 config파일만 생성합니다.\n\n\n\n다음, 입력창에 C:\\Users\\사용자\\.ssh\\config라고 되어있는 메시지를 선택합니다. \n.ssh 폴더의 config 파일 내용을 아래와 같이 수정합니다.\n\nconfig 파일 내용\n\n Host gate1\n HostName 172.16.10.36\n Port 22\n User 사용자ID\n IdentityFile 키파일 경로\n\n Host gate2\n HostName 172.16.10.37\n Port 22\n User 사용자ID\n IdentityFile 키파일 경로",
"crumbs": [
"<span class='chapter-number'>4</span> <span class='chapter-title'>Chapter2. 접속 방법</span>"
]
},
{
"objectID": "접속 방법.html#ssh-접속",
"href": "접속 방법.html#ssh-접속",
"title": "Chapter2. 접속 방법",
"section": "3. SSH 접속",
"text": "3. SSH 접속\n\nVScode에서 (CRTL+SHIFT+P)를 누릅니다.\n> remote-ssh : connect to host를 입력한 후, 선택합니다. \ngate1 또는 gate2를 선택합니다. gate1과 gate2는 동일한 환경입니다. \n운영체제 선택에서 Linux를 선택합니다. \nContinue를 선택합니다. \ngate에 접속 후, 본인이 선택한 gate 넘버가 맞는지 왼쪽 아래의 SSH:gate 넘버를 확인합니다. \n그 후, 탐색기(Explorer)를 클릭한 후, Open Folder를 클릭하면 디렉토리가 생성됩니다. \n경로가 /home1/{사용자ID}가 맞는지 확인한 후, OK를 선택합니다. 이 단계는 새로운 파일이 생성되기 전까지는 접속할 때마다 계속 실행해주어야 합니다.\n여기까지 잘 진행되셨다면, SSH에 접속되었습니다!\n\n\n4. 주의 사항\n일부 Mac 사용자들 중, 접속이 원활히 이루어지지 않는 경우를 종종 확인할 수 있습니다.\n이때에는 pem 파일을 vscode에서 열어보신 후, 아래와 같이 설정되어있는 지 확인해주세요. pem 파일은 LF의 형태여야 합니다.\n\n만일 본인의 pem 파일이 CRLF로 성정되어있다면, 해당 부분을 클릭하시면 다음과 같이 LF로 변경하실 수 있습니다.",
"crumbs": [
"<span class='chapter-number'>4</span> <span class='chapter-title'>Chapter2. 접속 방법</span>"
]
},
{
"objectID": "환경 구축.html",
"href": "환경 구축.html",
"title": "Chapter3. 환경 구축",
"section": "",
"text": "1. Linux 환경 설정\n💡 Environment Modules",
"crumbs": [
"<span class='chapter-number'>5</span> <span class='chapter-title'>Chapter3. 환경 구축</span>"
]
},
{
"objectID": "환경 구축.html#linux-환경-설정",
"href": "환경 구축.html#linux-환경-설정",
"title": "Chapter3. 환경 구축",
"section": "",
"text": "Environment Modules는 사용자로 하여금 \nUnix/Linux 환경 설정을 쉽게 수정할 수 있도록 돕는 모듈입니다. \nEnvironment Modules를 활용하면 환경변수(PATH 등)을 \n일일히 다시 지정해 줄 필요가 없습니다. \n\n공식 홈페이지(https://modules.sourceforge.net/)에서 다운로드 할 수 있습니다. \n\n1.1 Module avail\nUBIA Cluster 내에서 사용 가능한 모든 모듈을 확인할 수 있는 명령어입니다.\n\n(ubai) [ssu@gate1 ~]$ module avail\n\n---------------------- /opt/ohpc/pub/modulefiles ----------------------\n CUDA/11.2.2 cmake/3.24.2 cuda/11.2.2 \n EasyBuild/4.9.1 compiler-rt/latest cuda/11.3.1 \n R/4.3.1 compiler-rt/2023.1.0 (D) cuda/11.4.4 \n advisor/latest compiler-rt32/latest cuda/11.5.2 \n advisor/2023.1.0 (D) compiler-rt32/2023.1.0 (D) cuda/11.6.2 \n autotools compiler/latest cuda/11.7.1 \n ccl/latest compiler/2023.1.0 (D) cuda/11.8.0 \n ccl/2021.9.0 (D) compiler32/latest cuda/12.0.0 \n clck/latest compiler32/2023.1.0 (D) cuda/12.1.1 \n clck/2021.7.3 (D) cuda/leejihun_cuda cuda/12.2.1 (D) \n\n Where:\n D: Default Module\n\nIf the avail list is too long consider trying:\n\n\"module --default avail\" or \"ml -d av\" to just list the default modules.\n\"module overview\" or \"ml ov\" to display the number of modules for each name.\n\nUse \"module spider\" to find all possible modules and extensions.\nUse \"module keyword key1 key2 ...\" to search for all possible modules matching any of the \"keys\".\n\n\n\n1.2 Module show\n사용하고자 하는 모듈의 세부 정보를 확인할 수 있는 명령어입니다.\n\n(ubai) [ssu@gate1 ~]$ module show cuda/11.2.2\n------------------------------------------------\n /opt/ohpc/pub/modulefiles/cuda/11.2.2:\n------------------------------------------------\nwhatis(\"Name: CUDA Collection\")\nwhatis(\"Version: 11.2.2\")\nwhatis(\"Category: cuda\")\nprepend_path(\"PATH\",\"/opt/ohpc/pub/cuda/11.2.2/bin\")\nprepend_path(\"INCLUDE\",\"/opt/ohpc/pub/cuda/11.2.2/include\")\nprepend_path(\"LD_LIBRARY_PATH\",\"/opt/ohpc/pub/cuda/11.2.2/lib64\")\nfamily(\"cuda\")\nhelp([[ \nThis module loads the CUDA\n\nVersion 11.2.2\n\n]])\n\n\n\n1.3 Module load\n특정 모듈을 불러와 사용할 수 있는 명령어입니다. 여러 모듈을 동시에 불러올 수도 있습니다.\n\n(ubai) [ssu@gate1 ~]$ module load cuda/11.2.2\n\n\n\n1.4 Module list\n현재 사용 중인 모듈의 목록을 확인할 수 있는 명령어입니다.\n\n(ubai) [ssu@gate1 ~]$ module list\n\nCurrently Loaded Modules:\n 1) cuda/11.2.2 2) dal/latest\n\n\n\n1.5 Module rm\n사용 목록에서 특정 모듈을 제거할 때 사용하는 명령어입니다.\n\n(ubai) [ssu@gate1 ~]$ module rm dal/latest\n\nRemoving dal version 2023.1.0\nUse `module list` to view any remaining dependent modules.\n\n\n\n1.6 Module purge\nmodule rm와 달리 전체 사용 목록을 초기화하기 위해 사용하는 명령어입니다. module purge실행 후 module list에 아무런 module이 출력되지 않는 것을 확인할 수 있습니다.\n\n(ubai) [ssu@gate1 ~]$ module purge\n\n(ubai) [ssu@gate1 ~]$ module list\nNo modules loaded",
"crumbs": [
"<span class='chapter-number'>5</span> <span class='chapter-title'>Chapter3. 환경 구축</span>"
]
},
{
"objectID": "환경 구축.html#python-환경-설정",
"href": "환경 구축.html#python-환경-설정",
"title": "Chapter3. 환경 구축",
"section": "2. Python 환경 설정",
"text": "2. Python 환경 설정\n💡 Python\nPython은 웹 어플리케이션, 소프트웨어 개발, 데이터 사이언스, \n머신러닝, 딥러닝에 널리 사용되는 프로그래밍 언어입니다. \n오픈소스 환경을 가지고 있으며, 많은 사람들이 이용하는 언어입니다.\n파이썬을 활용하기 위해서는 보통 Anaconda를 활용하지만 리눅스 컴퓨팅 환경에서는 Miniconda를 활용합니다. UBAI 슈퍼컴퓨터에서도 파이썬을 이용하기 위해서는 Miniconda를 사용해야 합니다.\n💡 Miniconda\nAnaconda는 머신러닝이나 데이터 분석 등에 사용하는 \n여러가지 패키지가 기본적으로 포함되어있는 파이썬 배포판입니다. \n파이썬의 가상환경을 구축하는데 매우 유용하게 사용됩니다. \n\nMiniconda는 Anaconda의 경량버전이라고 볼 수 있습니다.\n\n2.1 Minicoda 설치\nMiniconda 설치를 진행하기 위해서는 Miniconda의 다운로드 사이트 링크를 이용한 다운로드 방법을 채택합니다.\n\n메뉴에서 새 terminal을 생성하시고 terminal 칸에 아래의 명령어를 입력합니다. 이는 Miniconda 다운로드 파일 인터넷으로부터 다운로드하는 과정입니다.\nwget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh\nwget으로 받은 파일을 이용해 bash 명령어를 통해서 설치를 진행합니다.\nbash Miniconda3-latest-Linux-x86_64.sh\n실행하면 Miniconda 사용에 따른 안내문과 같은 내용이 뜨기 때문에 내용이 꽤 깁니다. 라이센스 동의에 대한 내용이 모두 나타날 때까지 Enter를 꾹 눌러줍니다. 그 후 라이센스 동의 확인에 대한 질문에 ‘yes’ 라고 입력해줍니다. Enter를 너무 오래 눌러 동의 화면이 바로 넘어가지 않게 주의하세요.\n화면에서 해당 경로가 자신의 서버에 있는 경로와 맞는지 확인 후 Enter를 눌러줍니다.\n처음 접속 시, conda init 진행 선택에 대한 질문이 뜹니다. ’yes’를 입력하신 후 enter를 눌러주시면 됩니다.\n변경사항 반영을 위해 지금 작업한 창을 닫고 새로 접속하세요.\n재접속 시, terminal에 (base)[사용자ID@사용자_gate_number]가 보인다면 성공적으로 설치가 완료된 것입니다. 설치 후 왼쪽의 탐색기(Explorer) 목록에 miniconda 폴더가 있는지 꼭 확인해주세요.\n\n\n\n2.2 Minicoda 실행\nMiniconda 설치 후, Python 가상 환경을 생성하여 실행합니다.\n가상환경을 생성하여 사용하면 Python 패키지의 호환성 문제(Package Dependencies)를 해결하기 좋습니다. 여러 프로젝트나 공모전을 진행함에 있어 각 작업에 필요한 Python 패키지를 환경 별로 설치하여 따로 관리하기에 용이합니다.\n\n가상 환경 생성을 위해 아래의 명령어를 terminal에 입력합니다.\n\nconda create -n {가상환경_이름} python={설치할_Python_버전}\nex. conda create -n ubai python=3.11\n\n생성한 가상환경에 진입합니다.\n\nconda activate {가상환경_이름}\nex. conda activate ubai\n\n최초 한 번만 가상환경을 만들어두면, 이후에는 해당 가상환경에 conda activate를 통해 바로 접근할 수 있습니다.\n또한 conda info --envs를 통해 이미 생성되어있는 가상환경의 리스트를 확인할 수도 있으니, 참고 바랍니다.\n\n📌 참고 사항\n해당 가상 환경에서 Jupyter notebook의 사용을 희망할 시, 아래의 명령어를 입력하세요. pip install ipykernel jupyerlab or conda install ipykernel jupyterlab\n\n※ Python 환경에서는 패키지 설치를 위해 pip install 명령어를 이용합니다.",
"crumbs": [
"<span class='chapter-number'>5</span> <span class='chapter-title'>Chapter3. 환경 구축</span>"
]
},
{
"objectID": "환경 구축.html#enroot",
"href": "환경 구축.html#enroot",
"title": "Chapter3. 환경 구축",
"section": "3. Enroot",
"text": "3. Enroot\nenroot는 evidia에서 개발한 경량화된 컨테이너 런타임으로, 복잡한 컨테이너 관리 없이 간단하게 컨테이너를 실행할 수 있게 도와줍니다.\n주로 연구 환경에서 패키지 호환이 되지 않는, 일명 ’소프트웨어 종속성 문제’를 해결하고, 필요한 작업을 root 권한으로 수행할 수 있는 안전한 환경을 제공합니다.\nNVIDIA가 제공하는 공식 문서에서 enroot의 자세한 설명을 확인할 수 있습니다.\n\n💡 현재 UBAI 슈퍼컴퓨터는 Rocky Linux 8.8 버전을 사용하고 있습니다.\n이러한 환경에서 발생할 수 있는 문제점은 두 가지가 있습니다.\n첫째, /home 경로 안에서 다양한 사용자들이 함께 사용하고 있기 때문에 /home 경로의 외적인 부분에 영향을 미칠 수 있는 권한인 root 권한을 부여하기 어려운 점이 있습니다. 이에 따라, sudo 접근이 불가능합니다.\n둘째, Rocky Linux는 dnf라는 패키지 매니저를 사용하는데, 해당 패키지 매니저가 가지고 있지 않는 패키지들이 있습니다. dnf search 패키지명 명령어를 통해서 dnf라는 패키지 매니저가 설치해줄 수 있는 패키지들을 확인할 수 있는데요, 이 때 패키지를 찾을 수 없는 경우에는 다른 운영 체제를 사용해야 합니다.\n이 경우 원하는 패키지를 설치하는 레퍼런스를 찾아보면, 일반적으로 Rocky Linux가 아닌 대중적인 리눅스 환경을 사용할 것입니다. 대표적인 예로, ubuntu나 centos를 들 수 있습니다.\n따라서 여기서는 ubuntu OS를 설정하는 방법을 알아보겠습니다.\n\n3.1 Enroot 컨테이너 기능\n우리 클러스터는 사용자에게 enroot 명령어를 제공하고 있습니다. 이를 통해 시스템 소프트웨어 및 운영체제 종속적인 작업을 root 권한으로 안전하게 수행할 수 있도록 합니다. 클러스터의 확장을 통해서 2TB의 로컬 스토리지가 추가되었고, 이를 enroot 용으로 사용하게 되었습니다(각 노드의 /enroot에 데이터 위치).\n참고로 enroot 명령어는 계산 노드에서만 수행 가능하기 때문에, 반드시 srun을 통해서 노드 내에서 실행시켜야 합니다! (사용자들이 기본적으로 진입하는 포인트인 gate1과 gate2 안에서 가상 환경을 실행시키면 안됩니다.) 이 때, 노드 사용 상황에 따라 시간이 다소 소요될 수 있습니다. 바로 진입이 되지 않는 것은 오류가 아닙니다.\n따라서 gate에서부터 직접 노드들에 접속하여 가상 환경을 만들어야 합니다.\n이러한 노드의 접근을 돕는 명령어가 srun입니다. enroot는 docker 환경을 기반으로 컨테이너 가상화를 돕는 명령어입니다. 기존의 Rocky linux 8.8 버전에서 활용하기 어려운 작업들이나, sudo 권한이 필요한 경우 가상환경 내에서 sudo 명령어 관련을 쓸 수 있습니다.\n\n\n3.2 Image와 Container\n이러한 enroot는 docker 환경에서의 image와 container 기반으로 이루어져있습니다.\ndocker는 가상 환경을 만드는 데 큰 도움을 주는 소프트웨어이며, enroot는 docker와 비슷한 환경을 조성하여, docker 기반의 image나 container을 실행시킬 수 있도록 도와줍니다.\n\n💡 Image\n`image`는 어떤 실행 환경을 템플릿의 형태로 만들어 둔 것입니다. \n컨테이너는 이미지에 쓰여있는 대로 환경이 구성되게 됩니다.\n예를 들어, ubuntu 운영체제와 함께 파이썬 라이브러리들이 설치되어있는 환경을 이미지로 만들었다면,\n나중에 이 이미지를 실행시키면, \nubuntu 운영체제와 다양한 파이썬 라이브러리들이 사전에 설치되어 있는 가상환경이 생겨 \n보다 쉽고 빠르게 작업을 할 수 있게 되는 것입니다. \nimage들이 모아져있는 dockerhub을 찾아보면 \n다양한 소프트웨어들이 이미지의 형태로 제공되고 있다는 것을 알 수 있습니다.\n\n💡 Container\n`container`는 이러한 이미지를 실행시켜 만든 가상 환경입니다. \n컨테이너 환경은 이미지에 쓰여있던 대로 모든 세팅 절차를 거쳐 실행 환경을 구성한 것입니다.\n이 때 사용자는 명령어를 통해 가상 환경에 진입할 수 있으며, \n가상 환경 내에서는 모든 파일을 마음대로 조작할 수 있는 `root` 권한을 얻을 수 있게 됩니다.\n\n\n\n3.3 Enroot 가상환경 실행\n\n(1) 계산 노드 진입\nsbatch 명령어와는 다르게 enroot 명령어는 slurm에 의해 특별히 스케줄링 되는 명령어가 아닙니다.\n따라서 직접 계산 노드에 진입하여, 그 노드 위에서 Linux의 작업처럼 진행해야 합니다.\n\n# gpu5 파티션 노드에 진입\nsrun --pty -p gpu5 -c 2 /bin/bash\n\n\n\n\n(2) Enroot 이미지 다운로드\n프로젝트 수행을 위해 필요한 이미지를 docker hub에서 다운로드할 수 있습니다.\n\ndocker hub에서 이미지를 다운 받을 때에는 꼭 docker:// 접두사를 붙여야 합니다.\n\n# dockerhub에서 원하는 이미지를 다운로드\nenroot import docker://eclipse/ubuntu_python\n\n\n\n\n(3) Enroot 이미지 실행 및 컨테이너 생성\n변환된 이미지를 enroot에서 사용할 수 있도록 생성하고 실행합니다.\n이를 통해 enroot 컨테이너를 생성합니다.\n이미지를 다운로드하고, 파일을 살펴보면 ubuntu.sqsh와 같은 확장자를 가진 이미지가 생깁니다.\n아래의 명령어를 통해 이미지로 가상환경을 세팅할 수 있습니다.\n\n# 다운로드된 이미지 ubuntu.sqsh를 컨테이너로 만듦\nenroot create -n mycontainer eclipse_ubuntu_python.sqsh\n\n\n\n\n(4) Enroot 컨테이너 진입\n\n# 컨테이너 환경에 진입 (version.1)\nenroot start mycontainer\n# 컨테이너 환경에 진입 (version.2)\nenroot start --root --rw --mount .:/mnt ubuntu-test /bin/bash\n\n여기서 주목할 점은 --mount .:/mnt 명령을 통해 호스트에 있는 디렉터리를 컨테이너에 특정 디렉터리로 마운트할 수 있다는 점입니다.\n따라서 mnt 디렉토리에 들어가시면 원래 본인의 home 디렉터리에 있는 파일들이 그대로 있는 것을 확인할 수 있습니다.\n\n\n(5) Enroot 이미지 저장\nenroot에서는 기본적으로 컨테이너의 상태가 유지되지 않기 때문에, 작업한 환경을 다시 실행할 수 있도록 하려면 환경을 이미지로 만들어 두는 과정이 필요합니다.\nenroot에서는 생성한 컨테이너 내에서 설정이나 파일 등을 추가해도 해당 내용이 지속되지 않습니다.\n그래서 생성한 컨테이너 환경을 저장해 나중에 재사용하고 싶다면 변경한 환경을 새로운 이미지로 저장해야 합니다.\n기존 컨테이너에서 작업을 마친 후, 환경 구축 상에서 변화가 있다면 다음과 같이 별도의 이미지로 저장할 수 있습니다.\n\nenroot export mycontainer new_image.sqsh\n\n이미지가 생성되면, 이 이미지를 기반으로 컨테이너를 새로 만들고 실행할 수 있습니다.\n이 과정으로 수정된 환경을 영구적으로 유지할 수 있으며, 나중에 해당 이미지를 기반으로 원하는 작업을 이어나갈 수 있습니다.\n\n\n(6) Enroot 컨테이너 종료\n\nexit\n\nexit 외에도 Ctrl+D를 눌러서도 빠져나올 수 있습니다.",
"crumbs": [
"<span class='chapter-number'>5</span> <span class='chapter-title'>Chapter3. 환경 구축</span>"
]
},
{
"objectID": "Python 실행.html",
"href": "Python 실행.html",
"title": "Chapter4. Python 실행",
"section": "",
"text": "1. BASH 배치 파일 실행\nBash 창에서 배치 파일을 실행하여 파이썬 프로젝트를 실행할 수 있습니다.\n작업(job) 실행 후, 최대 이틀 동안 실행 가능합니다. 시뮬레이션이나 실험을 진행함에 있어 시간이 더 걸릴 것으로 예상된다면 관리자 메일([email protected])에 문의하셔서 최대 진행되는 노드의 진행 시간을 더 늘릴 수 있습니다. 최대 진행 시간은 일주일입니다.",
"crumbs": [
"<span class='chapter-number'>6</span> <span class='chapter-title'>Chapter4. Python 실행</span>"
]
},
{
"objectID": "Python 실행.html#bash-배치-파일-실행",
"href": "Python 실행.html#bash-배치-파일-실행",
"title": "Chapter4. Python 실행",
"section": "",
"text": "1.1 배치 파일 생성\n생성한 배치 파일의 내용은 아래와 같이 입력될 수 있습니다.\n아래의 사항을 본인의 작업(job)에 맞게 입력한 후, 본인이 원하는 파일의 이름을 지정하여 filename.sh 형식으로 파일을 저장합니다. 예를 들어 아래의 Shell 파일을 python_project.sh로 저장합니다.\n파일명이 .sh 형식인지 반드시 확인하세요.\n\n#!/bin/bash\n#SBATCH --nodes=1 \n#SBATCH --partition=gpu2 \n#SBATCH --cpus-per-task=56 \n#SBATCH --gres=gpu:4\n#SBATCH --job-name=UBAIJOB \n#SBATCH -o ./결과값 도출 지정 폴더 이름/jupyter.%N.%j.out # STDOUT \n#SBATCH -e ./결과값 도출 지정 폴더 이름/jupyter.%N.%j.err # STDERR\n\necho \"start at:\" `date` \necho \"node: $HOSTNAME\" \necho \"jobid: $SLURM_JOB_ID\" \n\nmodule unload CUDA/11.2.2 \nmodule load cuda/11.8.0\n\npython cnn.py 12 256 'relu'\n\n결과값 도출 지정 폴더 이름을 반드시 지정해주세요. 각각 결과 값 폴더를 따로따로 만들어주거나 아니면 동일 폴더에 지정하셔도 됩니다.\nSTDOUT은 결과 값 출력 파일, STDERR는 결과 값 도출 중 출력 되는 로그 파일입니다. 새 폴더를 만들기 위해서는 디렉토리(directory)에서 오른쪽 버튼을 눌러 새 폴더 만들기 버튼을 클릭하시면 됩니다.\n\n각 라인들의 의미는 다음과 같습니다.\n✔ #SBATCH --nodes=1 총 필요 노드 수를 지정하는 명령어이며, 노드는 자동으로 컴퓨터가 배정해줍니다. nodes=1은 노드를 한 개만 사용하겠다는 의미입니다.\n✔ #SBATCH --partition=gpu4 사용할 Partition을 지정하는 명령어입니다. Partition 정보는 UBAI Cluster 페이지를 참고하세요.\n✔ #SBATCH --cpus-per-task=14 총 필요 코어의 개수를 지정하는 명령어입니다. 노드는 n개의 코어를 가지며, 사용 노드 1개 당 몇 개의 CPU/GPU 코어를 쓸 것인지를 결정합니다. #of Cores/node 정보는 Partition 정보에서 확인할 수 있습니다. UBAI Cluster 페이지를 참고하세요.\n✔ #SBATCH --gres=gpu:1 몇 개의 GPU를 사용할 것인지 지정하는 명령어입니다. CPU Partition을 선택하신 경우 해당 코드는 지워주셔야 합니다. 해당 코드는 GPU의 개수를 지정하는 명령어이기에, 에러가 발생할 수 있습니다.\n✔ #SBATCH --job-name=UBAIJOB 작업 이름을 지정하는 명령어입니다.\n✔ echo \"start at:\" 'date' 접속 날짜가 표기됩니다.\n✔ echo \"node: $HOSTNAME\" 접속한 노드 번호가 표기됩니다.\n✔ echo \"jobid: $SLURM_JOB_ID\" jobid가 표기됩니다.\n✔ module ~ 원하는 Linux 환경을 구축할 수 있습니다. GPU 환경을 사용하고 싶은 경우에만 해당하며, GPU 환경을 사용하지 않을 경우(CPU Partition 사용) 지우셔도 무관합니다. Chapter3. 환경 구축에서 설명한 module envrionment에 해당합니다. 자세한 설명은 해당 파트에서 확인하세요.\n✔ python cnn.py 12 256 'relu' 원하는 Python 파일을 실행합니다. 실행하려는 파일은 반드시 .py파일의 형태로 존재해야합니다. 위 코드에는 cnn.py로 지정하였습니다. Python의 sys 패키지를 이용한 sys.argv로 매개변수를 이용한 실행 방법을 사용하였습니다. 자세한 사항은 sys의 공식문서에서 확인할 수 있습니다. 파라미터 없이 모델을 실행하고 싶은 경우에는 python {filename}.py로 실행할 수 있습니다.\n\n\n1.2 배치 파일 실행\n배치 파일을 실행하기에 앞서, 본인이 생성했던 Python 가상 환경에 들어와 있는 상태인지 재 확인합니다.\n이후, terminal에 sbatch 명령어를 이용하여 지정한 배치 파일명을 입력 및 실행하세요. 이는 작업(job)을 제출한다는 의미입니다.\n실행 후 나온 결과 값은 작업(job)에 대한 ID이니 꼭 따로 저장하거나 메모해두시기를 요청드립니다.\n\nsbatch filename.sh # ex) sbatch python_project.sh \n\n\n※ 예시코드인 cnn.py를 정상적으로 실행하기 위해서는 추가 패키지 설치 pip install tensorflow && pip install numpy가 필요합니다.\n\n\n작업(job) 제출이 정상적으로 진행되었다면, STDOUT폴더 안에 OUT 파일이 생성됩니다.\n만일 OUT파일이 생성되지 않았다면, 해당 Partition의 노드에 기존 작업(job)이 모두 할당되어 수행하지 못했을 가능성이 높습니다. 이 경우 terminal에 squeue 명령어를 입력하시고, 본인의 ID를 찾습니다.\n보통 배정이 되어있다면 정상적으로 n001, n002 … 으로 노드에 배정되어 있지만, 배정되지 않았을 경우 ( Resources, Priority )라는 메시지를 볼 수 있습니다. 그런 경우 다른 노드가 일이 끝나는 것을 기다리거나, 해당 파티션이 아닌 다른 파티션을 이용하여 노드를 배정받아야 합니다.\n다른 파티션을 이용하기 위해서는 Partition 목록에서 Partition과 cpus-per-task, gpu 갯수를 Partition에 맞게 수정하여 작업(job)을 다시 제출하셔야 합니다.\n이제 STDOUT폴더에 생성된 실행 결과 OUT파일을 확인할 수 있습니다.",
"crumbs": [
"<span class='chapter-number'>6</span> <span class='chapter-title'>Chapter4. Python 실행</span>"
]
},
{
"objectID": "Python 실행.html#jupyter-notebook-웹-실행",
"href": "Python 실행.html#jupyter-notebook-웹-실행",
"title": "Chapter4. Python 실행",
"section": "2. Jupyter Notebook 웹 실행",
"text": "2. Jupyter Notebook 웹 실행\nJupyter notebook을 웹에서 실행하여 파이썬 프로젝트를 실행할 수 있습니다.\n작업(job) 실행 후, 최대 이틀 동안 실행 가능합니다. 시뮬레이션이나 실험을 진행함에 있어 시간이 더 걸릴 것으로 예상된다면 관리자 메일([email protected])에 문의하셔서 최대 진행되는 노드의 진행 시간을 더 늘릴 수 있습니다.\n최대 진행 시간은 일주일입니다.\n\n2.1 배치 파일 생성\n생성한 배치 파일의 내용은 아래와 같이 입력될 수 있습니다.\n아래의 사항을 본인의 작업(job)에 맞게 입력한 후, 본인이 원하는 파일의 이름을 지정하여 filename.sh 형식으로 파일을 저장합니다. 예를 들어 아래의 Shell 파일을 jupyter_notebook.sh로 저장합니다.\n파일명이 .sh 형식인지 반드시 확인하세요.\n\n#!/bin/bash\n#SBATCH --nodes=1 \n#SBATCH --partition=gpu4 \n#SBATCH --cpus-per-task=14 \n#SBATCH --gres=gpu:1 \n#SBATCH --job-name=UBAIJOB\n#SBATCH -o ./결과값 도출 지정 폴더 이름/jupyter.%N.%j.out # STDOUT \n#SBATCH -e ./결과값 도출 지정 폴더 이름/jupyter.%N.%j.err # STDERR \n\necho \"start at:\" `date`\necho \"node: $HOSTNAME\" \necho \"jobid: $SLURM_JOB_ID\" \n\nmodule unload CUDA/11.2.2 \nmodule load cuda/11.8.0 \n\npython -m jupyter lab $HOME \\\n --ip=0.0.0.0 \\\n --no-browser\n\n결과값 도출 지정 폴더 이름을 반드시 지정해주세요. 각각 결과 값 폴더를 따로따로 만들어주거나 아니면 동일 폴더에 지정하셔도 됩니다.\nSTDOUT은 결과 값 출력 파일, STDERR는 결과 값 도출 중 출력 되는 로그 파일입니다. 새 폴더를 만들기 위해서는 디렉토리(directory)에서 오른쪽 버튼을 눌러 새 폴더 만들기 버튼을 클릭하시면 됩니다.\n각 라인들의 의미는 다음과 같습니다.\n✔ #SBATCH --nodes=1 총 필요 노드 수를 지정하는 명령어이며, 노드는 자동으로 컴퓨터가 배정해줍니다. nodes=1은 노드를 한 개만 사용하겠다는 의미입니다.\n✔ #SBATCH --partition=gpu4 사용할 Partition을 지정하는 명령어입니다. Partition 정보는 UBAI Cluster 페이지를 참고하세요.\n✔ #SBATCH --cpus-per-task=14 총 필요 코어의 개수를 지정하는 명령어입니다. 노드는 n개의 코어를 가지며, 사용 노드 1개 당 몇 개의 CPU/GPU 코어를 쓸 것인지를 결정합니다. #of Cores/node 정보는 Partition 정보에서 확인할 수 있습니다. UBAI Cluster 페이지를 참고하세요.\n✔ #SBATCH --gres=gpu:1 몇 개의 GPU를 사용할 것인지 지정하는 명령어입니다. CPU Partition을 선택하신 경우 해당 코드는 지워주셔야 합니다. 해당 코드는 GPU의 개수를 지정하는 명령어이기에, 에러가 발생할 수 있습니다.\n✔ #SBATCH --job-name=UBAIJOB 작업 이름을 지정하는 명령어입니다.\n✔ echo \"start at:\" 'date' 접속 날짜가 표기됩니다.\n✔ echo \"node: $HOSTNAME\" 접속한 노드 번호가 표기됩니다.\n✔ echo \"jobid: $SLURM_JOB_ID\" jobid가 표기됩니다.\n✔ module ~ 원하는 Linux 환경을 구축할 수 있습니다. GPU 환경을 사용하고 싶은 경우에만 해당하며, GPU 환경을 사용하지 않을 경우(CPU Partition 사용) 지우셔도 무관합니다. Chapter3. 환경 구축에서 설명한 module envrionment에 해당합니다. 자세한 설명은 해당 파트에서 확인하세요.\n✔ python -m jupyter lab $HOME \\ --ip=0.0.0.0 \\ --no-browse Jupyter notebook을 실행하는 코드입니다.\n\n\n2.2 배치 파일 실행\n배치 파일을 실행하기에 앞서, 본인이 생성했던 Python 가상 환경에 들어와 있는 상태인지 재 확인합니다.\n이후, terminal에 sbatch 명령어를 이용하여 지정한 배치 파일명을 입력 및 실행하세요. 이는 작업(job)을 제출한다는 의미입니다.\n실행 후 나온 결과 값은 작업(job)에 대한 ID이니 꼭 따로 저장하거나 메모해두시기를 요청드립니다.\n\nsbatch filename.sh # ex) sbatch jupyter.sh \n\n작업(job) 제출이 정상적으로 진행되었다면, STDOUT폴더 안에 OUT 파일이 생성됩니다.\n만일 OUT파일이 생성되지 않았다면, 해당 Partition의 노드에 기존 작업(job)이 모두 할당되어 수행하지 못했을 가능성이 높습니다. 이 경우 terminal에 squeue 명령어를 입력하시고, 본인의 ID를 찾습니다.\n보통 배정이 되어있다면 정상적으로 n001, n002 … 으로 노드에 배정되어 있지만, 배정되지 않았을 경우 ( Resources, Priority )라는 메시지를 볼 수 있습니다. 그런 경우 다른 노드가 일이 끝나는 것을 기다리거나, 해당 파티션이 아닌 다른 파티션을 이용하여 노드를 배정받아야 합니다.\n다른 파티션을 이용하기 위해서는 Partition 목록에서 Partition과 cpus-per-task, gpu 갯수를 Partition에 맞게 수정하여 작업(job)을 다시 제출하셔야 합니다.\n이제 생성된 ERR파일을 확인하고, Jupyter Notebook을 웹으로 실행시켜보겠습니다.\n\n\n2.3 포트 포워딩\n\nSTDERR폴더에 생성되어있는 ERR 파일을 확인합니다. \n빨간색 박스 안의 부분을 복사하세요. \nVScode의 하단에 PORTS 탭을 클린한 후, Forward a Port를 클릭합니다. \n2에서 복사한 코드는 Port에 붙여넣은 후, Open in Browser를 클릭합니다. \n웹에서 Jupyter 환경에 접속됩니다.\n\n\n\n2.4 Jupyter Notebook 로그인\n가장 처음 Jupyter 환경에 로그인하게 된다면, 다음과 같은 화면을 볼 수 있습니다. Jupyter Notebook의 접속방식으로는 두 가지 방법이 있습니다. 토큰 접속과 패스워드 접속입니다.\n1. 토큰 접속\nSTDERR폴더에 생성되어있는 ERR 파일에는 Token 값도 함께 포함되어있습니다. \n빨간색 박스 안의 부분이 Token에 해당합니다. 이 Token을 저장한 후, Password에 붙여 넣어 로그인합니다. \n만일 1번의 방식을 사용했다면, 재접속 시에도 Token을 매번 입력해주어야합니다.\n2. 패스워드 접속\nToken을 저장한 후, Token에 붙여 넣고 New Password에 본인이 원하는 Password를 지정하여 입력합니다. \n만일 2번의 방식을 사용했다면, 재접속 시에는 이 때 지정한 Password 입력 화면이 뜨게 됩니다.\n위 과정들을 모두 진행했다면 정상적으로 Jupyter Notebook이 구동될 것입니다.\n\n\n2.5 Jupyter Notebook 작업 마치기\n반드시 Jupyter Nobetook을 이용한 작업을 모두 끝낸 후에는 File → Shut Down을 눌러주거나, VScode의 terminal에서 scancel {job_ID} 명령어를 실행해주어야합니다. 이 때, job_ID는 앞서 배치에서 지정되었던 job_ID입니다.\n이는 작업(job)을 마치고 노드를 비워준다는 의미입니다. 노드가 비워져야 다음 사람이 사용할 수 있으니 유의바랍니다.",
"crumbs": [
"<span class='chapter-number'>6</span> <span class='chapter-title'>Chapter4. Python 실행</span>"
]
},
{
"objectID": "파일 로드.html",
"href": "파일 로드.html",
"title": "Chapter5. 파일 관리",
"section": "",
"text": "1. 기본 파일 관리\n대용량이 아닌 간단한 용량의 파일에 대해서는 VScode 자체에서 다운로드 및 업로드를 진행할 수 있습니다.",
"crumbs": [
"<span class='chapter-number'>7</span> <span class='chapter-title'>Chapter5. 파일 관리</span>"
]
},
{
"objectID": "파일 로드.html#기본-파일-관리",
"href": "파일 로드.html#기본-파일-관리",
"title": "Chapter5. 파일 관리",
"section": "",
"text": "1.1 다운로드\n다운로드 받고자 하는 파일에 커서를 위치한 후 오른쪽 마우스를 클릭하여 Download를 선택합니다. \n\n\n1.2 업로드\n업로드의 경우, 로컬에서 파일을 직접 드래그하여 탐색기(Explorer)의 원하는 위치에 드롭하면 됩니다.",
"crumbs": [
"<span class='chapter-number'>7</span> <span class='chapter-title'>Chapter5. 파일 관리</span>"
]
},
{
"objectID": "파일 로드.html#대용량-파일-관리",
"href": "파일 로드.html#대용량-파일-관리",
"title": "Chapter5. 파일 관리",
"section": "2. 대용량 파일 관리",
"text": "2. 대용량 파일 관리\n대용량 파일을 다운로드 및 업로드하기 위해서는 별도의 프로그램을 사용해야 합니다. 여기서는 FileZilla를 이용하여 파일을 관리하는 법을 설명합니다. FileZilla를 이용하면 다운로드와 업로드 진행 과정을 볼 수 있습니다.\nFileZilla의 경우, 공식 홈페이지에서 다운받을 수 있습니다.\n\n2.1 다운로드\n\n사이트 관리자 열기를 클릭합니다. \nNew site 버튼을 클릭합니다. \n프로토콜을 “SFTP - SSH File Transfer Protocol”로 바꿔줍니다. \n순서대로 정보를 입력합니다. \n\n\n프로토콜: SFTP\n호스트: 서버 퍼블릭 IPv4 주소\n포트번호: 22\n로그온 유형: 키 파일\n사용자: 서버 인스턴스 플랫폼 (ex. ubuntu)\n키파일: 키파일(.pem파일) 등록\n연결 버튼 누르기\n\n다운로드 받고자 하는 리모트 사이트(오른쪽)의 파일에 커서를 위치한 후 오른쪽 마우스를 클릭하여 다운로드를 선택합니다. \n\n\n2.2 업로드\n업로드의 경우, 로컬 사이트(왼쪽)에서 오른쪽 마우스를 클릭할 시 업로드라는 선택 칸을 확인할 수 있습니다.",
"crumbs": [
"<span class='chapter-number'>7</span> <span class='chapter-title'>Chapter5. 파일 관리</span>"
]
}
]