์๋ cs231n assignments๋ฅผ ์ํ Tutorials๋ cs231n ๊ณต์ Github์ ์ ์ ๋ฆฌ๋์ด ์๋ค. ํ์ง๋ง ์ฌ๊ธฐ๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผํ๋ค ๋ณด๋ฉด, ๋์ ํ๋ฅ ๋ก Create an image from our provided disk ํํธ์์ ๋งํ๊ณ ๋ง ๊ฒ์ด๋ค. Disk Image Source์ Repo(Bucket) Path๋ฅผ ์ ๋ ฅํ๋ฉด '๊ฐ์ฒด๊ฐ ์๊ฑฐ๋ ์ก์ธ์ค ๊ถํ์ด ์์ผ๋ฏ๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋์ ๊ฐ์ฒด๋ฅผ ํ์ํด๋ณด์ธ์'๋ผ๋ ์๋ฌ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋ฉด์ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ ์๊ฐ ์๋ค.
๊ฒ์์ ํด๋ณด๋ Stanford์์ cs231n์ ํ๊ธฐ๊ฐ ๋๋๋ฉด ์ด Bucket์ ์ ๊ทผ ๊ถํ์ ๋ง์๋๋ค๊ณ ํ๋ค. ์ด Disk Image์๋ anaconda, torch, tensorflow, CUDA ๋ฑ assignments์ ํ์ํ ํจํค์ง๋ค์ ์ค์นํด๋์ ๊ฒ ๊ฐ์๋ฐ, ์ด Image๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋ฐ๋ก ์ธํ ์ ํด์ผํ๋ค(์ด ํํ ๋ฆฌ์ผ์ ๋ง๋ ๊ฐ์ฅ ํฐ ์ด์ ์ด๊ธฐ๋ ํ๋ค).
ํด๋ผ์ฐ๋ ์ปดํจํ , ๋ฆฌ๋ ์ค ๋ฑ์ ์ต์ํ์ง ์์ ๋ณธ์ธ ๊ฐ์ ์ด์ฌ์๊ฐ assignments๋ฅผ ํ๋๋ฐ ์ด๋ ค์์ด ์๋๋ก Tutorial๋ค์ ์์ฑํ์์ผ๋ฉฐ, ๋ชฉ์ฐจ๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ๋ค.
- GCP(Google Cloud Platform) Tutorial
๊ณผ์ ๋ฅผ ์ํํ๊ธฐ ์ํ Compute Instance๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค. - Instance Setup Tutorial
Instance๋ฅผ ์์ฑํ ํ, cs231n์์ ์ ๊ณตํ๋ Disk Image ์์ด ๊ณผ์ ๋ฅผ ์ํํ๊ธฐ ์ํ ํ๊ฒฝ์ ์ธํ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค. - Jupyter Notebook Tutorial
๊ณผ์ ๋ ๋ณดํต Jupyter Notebook ์์์ ์ด๋ฃจ์ด์ง๋ค. ์ด๋ฅผ ์ฝ๊ฒ ์ค์ ํ๊ณ ๊ตฌ๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค. - PyTorch + CUDA Setup Tutorial (for Assginment 2, 3)
assignment 1๊น์ง๋ GPU๋ฅผ ๋ฌ ์ผ์ด ์์ง๋ง, assignment 2, 3๋ฅผ ์์ํ๊ฒ ํ๊ธฐ ์ํด์๋ GPU๋ฅผ Instance์ ๋ฌ๊ณ , CUDA์ Pytorch๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค.
ํด๋ผ์ฐ๋ ์ปดํจํ ์๋น์ค๋ฅผ ์ด์ฉํ๋ฉด์ ๊ฐ์ฅ ์ ๊ฒฝ์จ์ผํ ๋ถ๋ถ์ ์๊ธ์ด๋ค. ์ธ์คํด์ค ํ๋๋ง๋ค ์๊ฐ๋น ์ ๊ฒ๋ 0.2๋ฌ๋ฌ ์ ๋์์ GPU๋ฅผ ๋ฌ๋ฉด ์๊ฐ๋น 0.4๋ฌ๋ฌ ์ด์๊น์ง ์ฌ๋ผ๊ฐ๋ค. ๋ง์ฝ ์ธ์คํด์ค๋ฅผ ํ๋ฌ ๋ด๋ด ์ผ๋๊ณ ์์ผ๋ฉด, ์๋ฐฑ๋ฌ๋ฌ๊ฐ ๋๋ ๋น์ฉ ์ด ์๋ง์ ์ฒญ๊ตฌ๋ ์ ์๋ค.
๋ฐ๋ผ์, ์ฌ์ฉํ์ง ์๋ ์ธ์คํด์ค๋ ๋ฐ๋์ ์ค์ง๋ฅผ ํด์ผํ๋ค. ๋ณธ์ธ์ AWS(Amazon Web Service)๋ฅผ ์ฐ๋ค๊ฐ GCP๋ก ๋์ด์๋๋ฐ, GCP๋ ์ค์งํ ์ธ์คํด์ค์ ๋ํด์ ์๊ธ์ ๋ถ๊ณผํ์ง ์๋ ๊ฒ์ด ์ข๋ค๊ณ ๋๊ปด์ก์๋ค. AWS๋ ์ค์ง๋ฅผ ํด๋ ์ธ์คํด์ค๊ฐ ๋จ์์์ผ๋ฉด ๊ทธ๊ฒ์ ๋ํด ๊ณ์ ์๊ธ์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ๊ฐ ๊น๋ค๋ก์ ๊ธฐ ๋๋ฌธ์ด๋ค. (์ต๊ทผ์ ์ค์ง์ค์๋ ์๊ธ์ ๋ถ๊ณผํ์ง ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด ๋์๋ค๊ณ ๋ ํ๋ค) ์๋ฌดํผ, ์ธ์คํด์ค๋ฅผ ์ฐ์ง ์์ ๋์๋ ์ค์ง์ํค๋ ์ต๊ด์ ๋ค์ด์!
cs231n ๊ณต์ GCP Tutorial์์ Create and Configure Your Account ํํธ๊น์ง ๊ทธ๋๋ก ๋ฐ๋ผํ๋ค. ๋ฌ๋ฆฌ ์ด๋ ค์ด ์์ ์ ์๊ณ , ๊ณ์ ์ ๋ง๋ค๊ณ ์นด๋๋ฅผ ๋ฑ๋กํ๋ ๊ฐ๋จํ ๊ณผ์ ์ด๋ค.
๊ณผ์ ์ ๋ฐ๋ผ์ ๊ณ์ ์ ๋ฑ๋กํ์ผ๋ฉด, Compute Engine ๋ฉ๋ด์ ๋ค์ด๊ฐ๋ค. ์์ฑํด๋์ ์ธ์คํด์ค๊ฐ ์๋ค๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์ฌ ๊ฒ์ด๋ค.
๋ง๋ค๊ธฐ ๋ฒํผ์ ๋๋ฅด๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
์ธ์คํด์ค ์ด๋ฆ๊ณผ ์คํ์ ์ค์ ํ๋ค. ๋ง์ถค์ค์ ์ ํ์ง ์๊ณ ์ผ์ชฝ์ ๋๋กญ๋ค์ด์์ vCPU 8๊ฐ๋ฅผ ์ ํํ๋ฉด ๊ทธ์ ์๋ง๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๊ฐ์ด ํ ๋นํด์ค๋ค.
๋ง์ถค์ค์ ์ ๋๋ฅด๋ฉด GPU๋ฅผ ์ถ๊ฐํ ์ ์๋๋ฐ, assignment1๊ณผ assignment2 ์ด๋ฐ์๋ GPU๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์ถ๊ฐํ์ง ์์๋ ๋๋ค. GPU๋ฅผ ๋ฌ๋ฉด ๊ทธ๋งํผ ๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์(GPU๊ฐ ํนํ ๋น์ธ๋ค), GPU๊ฐ ํ์ํ ๋ถ๋ถ์์๋ง ์ธ์คํด์ค๋ฅผ ์์ ํ์ฌ GPU๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฒฝ์ ์ ์ด๋ค.
์ธ์คํด์ค์ ๋ถํ
๋์คํฌ๋ฅผ ์ค์ ํ๋ค. ์ฌ๊ธฐ์ ๋ณ๊ฒฝ ๋ฒํผ์ ๋๋ฅด๊ณ Ubuntu 16.04 LTS๋ฅผ ์ ํํ๋ค. ๋์คํฌ์ ํฌ๊ธฐ๋ ์ ๋นํ 40GB ์ ๋๋ก ํ๋ค. ์ด์ฐจํผ ์๊ธ ์ผ๋ง ์๋์จ๋ค.
๊ทธ ์ธ ์ต์ ๋ค์ ์ค์ ํ๋ค. Jupyter Notebook์ผ๋ก ์ ๊ทผํด์ผํ๋ฏ๋ก HTTP, HTTPS ํธ๋ํฝ์ ๋ชจ๋ ํ์ฉํ๊ณ , ์ธ์คํด์ค ์ญ์ ์ ๋ถํ ๋์คํฌ ์ญ์ ์ฒดํฌ๋ฐ์ค๋ฅผ ํด์ ํ๋ค.
์ฌ๊ธฐ๊น์ง ๋ฐ๋ผ ์๋ค๋ฉด ๋ง๋ค๊ธฐ ๋ฒํผ์ ๋๋ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
์ฑ๊ณต์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค๋ฉด, ์คํ ์ค์ธ ์ธ์คํด์ค์ ๋ชจ์ต์ด ๋ณด์ผ ๊ฒ์ด๋ค.
ํ์ ๋ฉ๋ด -> VPC ๋คํธ์ํฌ -> ์ธ๋ถ IP ์ฃผ์ ๋ก ๋ค์ด๊ฐ์ ๊ณ ์ ์ฃผ์ ์์ฝ ์ ํด๋ฆญํ๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ค์ ์ผ๋ก ๊ณ ์ ์ฃผ์๋ฅผ ์์ฝํ๋ค. ์ฐ๊ฒฐ ๋์ ์๋ ์ฐ๋ฆฌ๊ฐ ์์์ ๋ฐฉ๊ธ ๋ง๋ ์ธ์คํด์ค๋ฅผ ์ ํํ๋ฉด ๋๋ค.
์กฐ๊ธ ๊ธฐ๋ค๋ฆฐ ํ Compute Engine ํญ์ ๋ค์ ๋ค์ด์ค๋ฉด, ์ธ์คํด์ค์ ๊ณ ์ IP ์ฃผ์๊ฐ ํ ๋น๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
์ฐ๋ฆฌ๋ Jupyter Notebook์ผ๋ก ์์ ์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฉํ๋ฒฝ ์ค์ ์์ ํฌํธ๋ฅผ ํ๋ ์ด์ด์ฃผ์ด์ผํ๋ค. ํ์ ๋ฉ๋ด -> VPC ๋คํธ์ํฌ -> ๋ฐฉํ๋ฒฝ ๊ท์น ์ผ๋ก ๋ค์ด๊ฐ๋ค.
๋ฐฉํ๋ฒฝ ๊ท์น ๋ง๋ค๊ธฐ ๋ฅผ ํด๋ฆญํด ์๋ก์ด ๊ท์น์ ํ๋ ๋ง๋ ๋ค.
๋ค๋ฅธ ์ค์ ๋ค์ ๊ฑด๋๋ฆฌ์ง ์๊ณ , ๋์: ๋คํธ์ํฌ์ ๋ชจ๋ ์ธ์คํด์ค, ์์ค IP ๋ฒ์: 0.0.0.0/0, ํ๋กํ ์ฝ ๋ฐ ํฌํธ: tcp:8888 ๋ก ํ๊ณ ๋ง๋ค๊ธฐ ๋ฅผ ํ๋ค. ๊ท์น ์ด๋ฆ์ ์๋ฌด๊ฑฐ๋ ์๊ด ์๋ค. ๋ณธ์ธ์ cs231n-firewall๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ท์น์ ์์ฑํ๋ค.
์ฑ๊ณต์ ์ผ๋ก ๋ฐฉํ๋ฒฝ ๊ท์น์ด ์์ฑ๋์๋ค!
cs231n Github์ Setup Tutorial์์ Working locally ๋ถ๋ถ์ ๋ฐ๋ผํ๋ฉด ๋๋ค. Anaconda์ python virtualenv๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, Anaconda๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ด ์ข ๋ ๊ฐ๋จํ๋ฏ๋ก ๊ทธ๊ฒ์ ์ ํํ๋ค.
ํ ๊ฐ์ง ์ฃผ์์ฌํญ ์ด ์๋๋ฐ, ๊ฐ assignment ํด๋์ ์๋ requirements.txt python virtualenv๋ฅผ ์ฌ์ฉํ ๋๋ง ์ค์นํด์ฃผ์ด์ผํ๋ค. conda ๊ฐ์ํ๊ฒฝ ๋ด์์ ํด๋น ํจํค์ง๋ค์ ์ค์นํ๋ฉด ์ด๋ฏธ ์ค์น๋ ํจํค์ง๋ค๊ณผ ์ถฉ๋์ ์ผ์ผํค๋ฉด์ ๋๋ฆฌ๊ฐ ๋๋ฏ๋ก... ํด๋น ํ์ผ๋ค์ ๊น๋ํ๊ฒ ๋ฌด์ํด์ฃผ์.
sudo apt update
wget https://repo.continuum.io/archive/Anaconda3-2018.12-Linux-x86_64.sh
bash Anaconda3-2018.12-Linux-x86_64.sh
yes, yes๋ฅผ ํ๋ฉด์ ์งํํ๋ค ๋ณด๋ฉด ์ค์น๊ฐ ์๋ฃ๋๋ค. ๋ค๋ง anaconda3๊ฐ ์ค์น๋ ํ Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]๋ผ๋ฉด์ VSCode์ ์ค์น๋ฅผ ๊ถ์ ํ๋๋ฐ, ์ฌ๊ธฐ์ ๊ตณ์ด VSCode๋ฅผ ๊น ์ด์ ๋ ์์ผ๋ no๋ฅผ ์
๋ ฅํ๋ค.
์ฐ์ conda ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ PATH ๋ฑ๋ก์ ํด์ฃผ์ด์ผ ํ๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ค(<user_directory>์ ubuntu user name์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ์ด์ผ ํ๋ค. SSH shell(์๋ ๊ทธ๋ฆผ)์์ ๋นจ๊ฐ ๋๊ทธ๋ผ๋ฏธ๋ฅผ ์น ๋ถ๋ถ์ด username์ ํด๋นํ๋ค).
export PATH=/home/<user_directory>/anaconda3/bin:$PATH
conda ๊ฐ์ํ๊ฒฝ์ ์์ฑํด์ค๋ค. -n cs231n์ ๊ฐ์ํ๊ฒฝ์ ์ด๋ฆ์ cs231n์ผ๋ก ์ง์ ํ ๊ฒ์ด๊ณ , ๊ทธ ๋ค๋ python์ ๋ฒ์ ์ ๋ช
์(python 3.6์ด ๊ฐ์ฅ stableํ ๊ฒ ๊ฐ๋ค)์, anaconda์ ํจํค์ง๋ค์ ์์ํ๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
conda create -n cs231n python=3.6 anaconda
๋ค์ ๊ธด ์๊ฐ์ ๊ธฐ๋ค๋ ค์ ๊ฐ์ํ๊ฒฝ ์์ฑ์ด ์๋ฃ๋๋ฉด, ๊ฐ์ํ๊ฒฝ์ activate / deactivateํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๋ ค์ฃผ๋ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋ค. ์ ๋๋ก ์์ฑ์ด ๋์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด๋ก ๊ฐ์ํ๊ฒฝ์ activate ํด๋ณธ๋ค.
source activate cs231n
์
๋ ฅ์ฐฝ ์ผ์ชฝ์ (cs231n)์ด๋ผ๊ณ ๊ฐ์ํ๊ฒฝ์ด activate ๋์์์ ๋ํ๋ด๋ ๊ดํธ ํ์๊ฐ ๋จ๋ฉด ์ฑ๊ณต์ด๋ค. ํ์ธ์ ํ์ผ๋ฏ๋ก deactivate ๋ช
๋ น์ผ๋ก ๊ฐ์ํ๊ฒฝ์ deactivate ํ๋ค.
assignment code ํ์ผ๋ค์ ๋ชจ๋ cs231n ๊ณต์ github์ ์์ง๋ง, ํธ์๋ฅผ ์ํด ๋ณธ์ธ์ github repo์๋ ์ฌ๋ ค๋์๋ค. ๋ค์ ๋ช ๋ น์ด๋ก assignment code๋ค์ ๋ค์ด๋ฐ๋๋ค.
git clone https://github.com/jinh0park/cs231n-setup.git
๊ทธ ํ, ๊ฐ Assginment์ ํ์ํ dataset๋ค๋ ๋ฏธ๋ฆฌ ๋ค์ด๋ฐ์์ฃผ์.
cd cs231n-setup
bash assignment1/cs231n/datasets/get_datasets.sh
bash assignment2/cs231n/datasets/get_datasets.sh
bash assignment3/cs231n/datasets/get_datasets.sh
Python์ ์ด๋ ์ ๋ ๊ณต๋ถํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด Jupyter Notebook์ ์จ๋ณธ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค. Local ํ๊ฒฝ์์ ๊ตฌ๋ํ ๋๋ ์ฃผ๋ก jupyter notebook ๋ช
๋ น์ด๋ก localhost:8888์ Notebook์ ๋์์ ์คํํ๋๋ฐ, ํด๋ผ์ฐ๋์์ ์ด๋ฅผ ์ด์ฉํ ๋๋ ๋ช ๊ฐ์ง ์ค์ ์ด ๋ ํ์ํ๋ค. ๊ฐ์ฅ ์ค์ํ ์ค์ ์ password๋ผ๊ณ ์๊ฐํ๋๋ฐ, local์์ ์์
ํ ๋๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๋ด Notebook์ ๋ค์ด์ฌ ์ผ๋ ค๊ฐ ์์ง๋ง, ํด๋ผ์ฐ๋์์ ์์
์ ํ ๋๋ ๊ณ ์ IP๋ฅผ ์ฃผ์์ฐฝ์ ์
๋ ฅํ๋ฉด ๋๊ตฌ๋ ๋ด Notebook์ ๋ค์ด์ฌ ์ ์๊ธฐ ๋๋ฌธ์ password๋ฅผ ์ค์ ํ๋ ์์
์ด ํ์ํ๋ค. (์ด๋ IP์ฃผ์๋ฅผ ์ ํํ๋ค๋์ง, ๊ธฐํ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง GCP๋ ์ด๊ฒ ๊ฐ์ฅ ํธํ ๊ฒ ๊ฐ๋ค)
์ด์ , ์ธ์คํด์ค๋ฅผ ์ผ๊ณ ipython ๋ช
๋ น์ด๋ฅผ ์น๋ค. ipython ์ฝ์์ด ์ผ์ง๋ฉด ์์๋๋ก from IPython.lib import, passwd()๋ฅผ ์
๋ ฅํด ๋น๋ฐ๋ฒํธ์ ๋ํ sha1 ํด์๊ฐ์ ๋ฐ๋๋ค. (์๋ ์ฐธ๊ณ ) ipython ๋ช
๋ น์ด๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๊ณ ํ๋ฉด . ์์์ ํ ๋ฒ ์ผ๋ export PATH=/home/<user_directory>/anaconda3/bin:$PATH๋ฅผ ๋ค์ ์
๋ ฅํด Path์ ์ถ๊ฐํด์ค๋ค.
ubuntu@cs231n:~$ ipython
Python 3.7.1 (default, Dec 14 2018, 19:28:38)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from IPython.lib import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:90b7ff928564:e704593562aa65899ad09940fd9ed4145799cdde'
๋ง์ง๋ง์ ์ถ๋ ฅ๋ sha1:~~~๋ฅผ ๋ณต์ฌํ์ฌ ๋ฉ๋ชจ์ฅ ๊ฐ์ ๊ณณ์ ์ ์ด๋๋ค.
Ctrl+Z๋ฅผ ๋๋ฌ ipython์ ์ข
๋ฃํ ํ, ๋ค์ ๋ช
๋ น์ผ๋ก config ํ์ผ์ ์์ฑํ๋ค.
jupyter notebook --generate-config
https ์ฐ๊ฒฐ์ ์ํ certificates๋ฅผ ๋ง๋ ๋ค.
mkdir certs
cd certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
๋ชจ๋ Enterํค๋ฅผ ์น๊ณ ๋์ด๊ฐ๋ ๋๋ค.
๊ทธ ํ ์ ์ ์์ฑํ Jupyter Notebook config file์ ์์ ํ๋ค.
cd ~/.jupyter/
vi jupyter_notebook_config.py
์ฃผ์์ผ๋ก ๊ฐ๋ํ ํ์ผ์ด ๋์ค๋๋ฐ, ์๋ฌด๋ฐ๋ ํธํ๋๋ก(๋งจ ์์ค๋ ๊ด์ฐฎ๋ค) ๋ค์ ์ฝ๋๋ค์ ๋ถ์ฌ๋ฃ๋๋ค. ์ฃผ์ํ ์ ์, ์๋ ์ฝ๋์์ c.NotebookApp.certfile์ ์์น์ c.NotebookApp.password์ ํด์๊ฐ(๋ฉ๋ชจ์ฅ์ ์ ์ด๋ ๊ทธ ๊ฐ)์ ๊ฐ์ ์๋ง๋ ๊ฐ์ผ๋ก ์์ ํด์ฃผ์ด์ผ ํ๋ค.
c = get_config()
# Kernel config
c.IPKernelApp.pylab = 'inline' # if you want plotting support always in your notebook
# Notebook config
c.NotebookApp.certfile = u'/home/<user_directory>/certs/mycert.pem' #location of your certificate file
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False #so that the ipython notebook does not opens up a browser by default
c.NotebookApp.password = u'sha1:b962c2993b85:3e45a67aa4adf59909c8deb322e6e016bdf8d671' #the encrypted password we generated above
# Set the port to 8888, the port we set up in the AWS EC2 set-up
c.NotebookApp.port = 8888
์์ ์ ํ์ผ๋ฉด, assignments๋ค์ด ๋ชจ์ฌ์๋ ํด๋๋ก ์ด๋ํด์ ์์ ์์ฑํ conda enviroment๋ฅผ ํ์ฑํํ ํ Jupyter Notebook์ ์คํํ๋ค.
cd ~/cs231n-setup
source activate cs231n
jupyter Notebook
Jupyter Notebook์ ์คํํ์ผ๋ ์ด์ ์น๋ธ๋ผ์ฐ์ ์์ ์ ์ํด๋ณด์. ์์์ ํ ๋นํ๋ ip์ฃผ์ + ํฌํธ๋ฒํธ(8888)์ ์น๋ธ๋ผ์ฐ์ ์ ์ ๋ ฅํ๋ฉด Jupyer Notebook์ ์ ์ํ ์ ์๋ค. ๋จ, ํฌ๋กฌ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ๋ง๋ certificates๊ฐ ๊ณต์ธ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋น์ฐํ ๊ฒฐ๊ณผ์ด๋ค. ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๊ณ ๊ณ ๊ธ ์ ๋๋ฌ ~~~(์์ ํ์ง ์์)์ผ๋ก ์ด๋ ์ ๋๋ฌ์ค๋ค.
๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด, Local์์ ์์ ํ ๋์ ๊ฐ์ Jupyter Notebook์ ํ๋ฉด์ด ์ฑ๊ณต์ ์ผ๋ก ๋์จ ๊ฒ์ ๋ณผ ์ ์๋ค.
source activate cs231n
pip install torch
assignment2์ ํ๋ฐ๋ถ๋ถํฐ GPU๋ฅผ ์ฌ์ฉํด์ผ ํ๋(pytorch/tensorflow๋ฅผ ์ธ ๋) ๊ณผ์ ๊ฐ ๋์จ๋ค. GCP๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ฉด GPU์ ํ๋๊ฐ 0์ผ๋ก ๋์ด์์ด GPU๋ฅผ ์ธ์คํด์ค์ ์ถ๊ฐํ ์ ์๋ค. ๊ทธ๋ด๋๋ ํ ๋น๋์ ์ง์ ๋๋ ค์ผํ๋๋ฐ, ์ด ๊ณผ์ ์ด ํ๋ฃจ์ ๋ ์์๋ ์ ์์ผ๋ ๋ฏธ๋ฆฌ ํ๋๋ฅผ ๋๋ ค๋๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.
์ธ์คํด์ค ์ธ๋ถ์ฌํญ-์์ ์ ๋ค์ด๊ฐ์ GPU๋ฅผ ์์ ๊ฐ์ด ์ถ๊ฐํ๋ฉด ๋ฌธ์ ์์ด ์ธ์คํด์ค๊ฐ ์ ์์ ์ด ๋๋ค. ํ์ง๋ง ์์ ์ ํ ํ ์ธ์คํด์ค๋ฅผ ์์ํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ๋ฌธ๊ตฌ๊ฐ ๋จ๋ฉด์ ์ธ์คํด์ค๊ฐ ์์ํ์ง ์๋๋ค.
์์์ ๋งํ ํ ๋น๋ ๋ฌธ์ ์ธ๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ ๋ฉ๋ด -> IAM ๋ฐ ๊ด๋ฆฌ์ -> ํ ๋น๋ ํญ์ผ๋ก ๋ค์ด๊ฐ๋ค.
์ธก์ ํญ๋ชฉ ์์ GPUs ๋ฅผ ๊ณ ๋ฅด๋ฉด, ํ ๋น๋์ด 0์ผ๋ก ๋์ด์๋๊ฒ์ ํ์ธํ ์ ์๋ค. ํ ๋น๋ ์์ ์ ๋๋ฌ ์ด๋ฅผ ์ํ๋ ์์น๋ก ์ ๋ ฅ ํ ์ ์ถ์ ๋๋ฅด๋ฉด GCP ์ธก์ ์์ฒญ์ด ์ ๋ฌ๋๋ฉฐ, ๊ด๋ จ๋ ๋ฉ์ผ๋ค์ด ์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ๋ฃจ ์ ๋ ๊ธฐ๋ค๋ฆฌ๋ฉด ํ๋๊ฐ ์ ์์ ์ผ๋ก ๋๋ ค์ก๋ค๋ ๋ฉ์ผ๊ณผ ํจ๊ป GPU๋ฅผ ๋ฌ์ ์ธ์คํด์ค๋ฅผ ์ ์์ ์ผ๋ก ์คํํ ์ ์๊ฒ ๋๋ค.
GPU๋ฅผ ๋ฌ์์ง๋ง, pytorch์์ GPU ์ฐ์ฐ์ ์ด์ฉํ๊ธฐ ์ํด์๋ CUDA๊ฐ ์ค์น๋์ด ์์ด์ผํ๋ค.
์ฐ์ , ๋ค์ ๋ช ๋ น์ผ๋ก nvidia driver๋ฅผ ์ค์นํ๋ค.
sudo apt update
sudo apt upgrade
sudo apt install nvidia-smi
๋ค์์ผ๋ก๋ CUDA๋ฅผ ์ค์นํ๊ธฐ ์ํด shell script๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋ค.
vi setup_cuda.sh
ํด๋น ํ์ผ์ ์๋ ๋ด์ฉ์ copy&pasteํ๋ค.
#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-10-0; then
# The 16.04 installer works with 16.10.
curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
dpkg -i ./cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
apt-get update
apt-get install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1
์์ฑํ ์คํฌ๋ฆฝํธ๋ฅผ sudo๋ก ์คํํด์ฃผ๋ฉด, CUDA ์ค์น๊ฐ ์งํ๋๋ค.
sudo bash setup_cuda.sh
์ค์น๋ฅผ ์๋ฃํ์ผ๋ฉด conda ํ๊ฒฝ์์ python์ ์คํํ ํ ๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด CUDA๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ ์ ์๋ค.
from torch.cuda import is_available
is_available()
์ค์น๊ฐ ์ ๋์๋ค๋ฉด True๋ฅผ ์๋๋ผ๋ฉด False๋ฅผ ๋ฐํํ๋ค.