๐ณ Docker study 2nd
Building a Cloud-Based Docker Environment on Azure
by Arielle
1. Create a VM (Virtual Machine)
Microsoft Azure๋ฅผ ์ด์ฉํด์ Ubuntu ๊ฐ์๋จธ์ ์ ๊ตฌ์ถํ๋ค. ์์ ํฌ์คํ ์ ๋ค๋ค๋ Image๋ฅผ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฒ์ ๊ณผ ์ข ๋ฅ์ ๋ฐ๋ผ ์ ํํ ์ ์์๋ค. (Image๊ฐ ๋ญ์ง ํ๋ฒ์ ๊ธฐ์ต๋์ง ์์๋ค๋ฉด ์ด์ ํฌ์คํ ์ ํ๋ฒ ์ฝ๊ณ ์ค๋ ๊ฒ์ ์ถ์ฒํ๋ค!๐) ๋๋ โkaggle-linux-gpu-vmโ์ ์ด๋ฆ์ผ๋ก ํ๋ ๊ฐ์๋จธ์ ์ ๋ง๋ค์๊ณ , ๋๋จธ์ง ์ต์ ๋ค๋ ์ ํํด์ฃผ์๋ค.
์ฐธ๊ณ ๋ก ๋ค์ชฝ์ ์ค๋ช ํ๊ฒ ์ง๋ง ๊ฐ์๋จธ์ ์ด๋ฆ์ ๋ง๋ค๋ฉด Resource group์ผ๋ก โ๋ด๊ฐ ๋ง๋ ๊ฐ์๋จธ์ ์ด๋ฆ_groupโ์ผ๋ก ์๋ ์์ฑ๋๋ค. ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณด์๋ฉด, ๊ฐ์๋จธ์ ์ ๋ง๋ค๋ฉด ๊ทธ์ ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฆฌ์์ค๋ค(๋คํธ์ํฌ ์ธํฐํ์ด์ค, ๋์คํฌ, ๊ณต์ฉ IP ์ฃผ์, ๊ฐ์ ๋คํธ์ํฌ ๋ฑ)์ด ๋์์ ์์ฑ๋๋๋ฐ ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฆฌ์์ค ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ๊ด๋ฆฌํ๋ค. ์๋ง ์ง๊ธ์ ์ดํด๊ฐ ์๋ ๊ฑฐ๋ค. ์๋ํ๋ฉด ๋๋ ๊ฐ์๋จธ์ ์ ๋ง๋๋ ๋จ๊ณ์์๋ ์ด ๋ฆฌ์์ค ๊ทธ๋ฃน์ด ์๋ฟ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ์ง๊ธ์ ๋ฆฌ์์ค ๊ทธ๋ฃน์ด๋ ๊ฐ์๋จธ์ ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌ, ์ถ์ , ์ญ์ ํ๋ ๋ฌถ์ ์ ๋๋ก๋ง ์ดํดํด๋ ์ถฉ๋ถํ๋ค.
Azure์ ๋น์ฉ ๋ถ๊ณผ ๋ฐฉ์์ ํ๋ถ์ ์ด๋ค.๐ธ ๋ด๊ฐ ๊ฐ์๋จธ์ ์ ์ผ๋ง๋ ์ค๋ซ๋์ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ์๊ธ์ด ๋ถ๊ณผ๋๋ ๋ฐฉ์์ด๋ผ ๋ฏธ๋ฆฌ ์์ฐ ํ๋๋ฅผ ์ ํด๋๋ ๊ฒ์ด ํ๋ช ํ ์ ํ์ด๋ค! ์๋ ์ฌ์ง์์ ์ดํด๋ณผ ๋ถ๋ถ์ Image์ Size์ด๋ค. Azure์์๋ ๋งค์ฐ ๋ค์ํ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ค. ๋๋ ๊ทธ ์ค์์ โNVIDIA GPU-Optimized VMI -v23.09.1-64 Gen2โ ๋ฒ์ ์ ์ ํํ๋ค. See all images ์ต์ ์ ํตํด ์ฌ๋ฌ ๋ฒ์ ์ ํ์ธํ ์ ์๋๋ฐ, ๊ฐ์ NVIDIA GPU๋ผ๋ ๊ธฐ๋ฅ๊ณผ ์ฌ์์ ๋ฐ๋ผ ์ฌ๋ฌ ๋ฒ์ ์ด ์กด์ฌํ๋ฏ๋ก ์ฉ๋์ ๋ง๋ ๊ฒ์ ์ ํํ๋ฉด ๋๋ค.
๊ฐ์๋จธ์ ์์ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ ์ง์ ์ง์ ํ ์ ์์๋ค. ๋๋ โStandard_NC4as_T4_v3โ์ ์ ํํ๋๋ฐ, ์ด ์ธ์คํด์ค๋ 4๊ฐ์ vCPU์ 28GiB์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฌ๋์ด ์๋ค.
1.1 ๐ก Azure Spot: A Smart Way to Use Cloud Resources!
์์์ Azure๋ ํ๋ถ์ ๋ผ๊ณ ์ ๊น ์ธ๊ธํ์๋๋ฐ, Azure Spot ์ธ์คํด์ค๋ฅผ ์ด์ฉํ๋ฉด ์ข ๋ ๊ฒฝ์ ์ ์ผ๋ก ํด๋ผ์ฐ๋๋ฅผ ํ์ฉํ ์ ์๋ค. Azure Spot์ ์ดํดํ๊ธฐ ์ํด์๋ ๋จผ์ ํด๋ผ์ฐ๋๊ฐ ๋ฌด์์ธ์ง ์ ๋ฆฌํ๊ณ ๊ฐ ํ์๊ฐ ์๋ค.
1.2 โ๏ธ What is Cloud?
ํด๋ผ์ฐ๋๋ ์ธํฐ๋ท์ ํตํด ์๋ฒ, ์คํ ๋ฆฌ์ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋คํธ์ํน ๋ฑ ๋ค์ํ IT ์์์ ํ์์ ๋ฐ๋ผ ๋น๋ ค ์ฌ์ฉํ๋ ์์คํ ์ด๋ค. ์ฝ๊ฒ ๋งํด, ๋ด ์ปดํจํฐ์ ํ๋ก๊ทธ๋จ์ ์ค์นํ ํ์ ์์ด ์จ๋ผ์ธ์์ ๋ชจ๋ ๊ฑธ ์ฒ๋ฆฌํ ์ ์๋ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ ์๋น์ค์ด๋ค. ๋๋ถ์ ์ํ๋ ๋งํผ ์์์ ๋น๋ฆฌ๊ณ , ํ์ ์์ ๋๋ ๋ฐ๋ฉํ ์ ์์ด์ ๋งค์ฐ ์ ์ฐํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค!
Azure Spot ์ธ์คํด์ค๋ Azure์์ ๋จ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ ดํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ฒฝ๋งค ์์คํ ์ ํตํด ๋ฆฌ์์ค๋ฅผ ํ ๋น๋ฐ๊ฒ ๋๋๋ฐ, ์ด๋ ์ฌ์ฉ์๋ 1์๊ฐ๋น ์ผ๋ง๊น์ง ์ง๋ถํ ์ ์๋์ง ์ต๋ ๊ฐ๊ฒฉ(Maximum price you want to pay per hour)์ ์ค์ ํ ์ ์๋ค. ์ฆ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ผ๋ง๋ ๋์ ๊ฐ๊ฒฉ์ ์ค์ ํ๋๋์ ๋ฐ๋ผ, ๋ด ๊ฐ์๋จธ์ ์ด ๊ณ์ ์ ์ง๋๊ฑฐ๋, ์ค์ง๋ ์ ์๋ ๊ฒ์ด๋ค.
์ฝ๊ฒ ๋งํด์, ๋ด๊ฐ ์ค์ ํ ๊ฐ๊ฒฉ์ด ํ๊ท ์คํ ๊ฐ๊ฒฉ๋ณด๋ค ๋๋ค๋ฉด, ๋ด ๊ฐ์๋จธ์ ์ ์์ ํ๊ฒ ์ ์ง๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ์๋ฏธ๋ก ๋ง์ฝ ์ต์ ์ ๊ฒฝ์ฐ์ ๋ค๋ฅธ ์ฌ๋์ด ๋๋ณด๋ค ๋ ๋์ ๊ฐ๊ฒฉ์ ์ค์ ํ๊ฑฐ๋ Azure์์ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ๋ฉด, ๋ด ๊ฐ์๋จธ์ ์ด ์ค์ง(Eviction)๋ ์๋ ์๋ค.๐
Eviction ์ข ๋ฅ๋ ๋๊ฐ์ง๊ฐ ์๋ค.
๊ตฌ๋ถ | ์ ํ/์ ์ฑ | ์ฅ์ | ๋จ์ |
---|---|---|---|
Eviction Type | Capacity only | - ๊ฐ์๋จธ์ ์ด Azure ์ฉ๋์๋ง ์์กดํ๋ฏ๋ก, ๊ฐ๊ฒฉ ๋ณ๋ ๊ฑฑ์ ์์ | - Azure์ ์ฉ๋์ด ๋ถ์กฑํ ๋ ๊ฐ์์ค๋ฌ์ด ์ค์ง ๊ฐ๋ฅ์ฑ ์์ |
Price or Capacity | - ์ต๋ ๊ฐ๊ฒฉ์ ์ค์ ํด ๋น์ฉ ์ ์ด ๊ฐ๋ฅ - ๊ฐ๊ฒฉ ๋ณ๋์ ๋ง์ถฐ ์์ ์ฑ ํ๋ณด |
- ์ค์ ํ ๊ฐ๊ฒฉ์ ์ด๊ณผํ๊ฑฐ๋ ์ฉ๋์ด ๋ถ์กฑํ ๋ ์ค์ง๋ ๊ฐ๋ฅ์ฑ ์์ | |
Eviction Policy | Stop / Deallocate | - ๊ฐ์๋จธ์ ์ค์ง ํ์๋ ๋ฐ์ดํฐ ๋ณด์กด - ๋์ค์ ๋ค์ ์์ ๊ฐ๋ฅ |
- ์ค์ง๋ ํ ๋ค์ ์์ํ ๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ |
Delete | - ๋น์ฉ์ด ๋ง์ด ์ ๊ฐ๋จ - ์์์ด ์ฆ์ ํด์ ๋จ |
- ๊ฐ์๋จธ์ ๊ณผ ๋ฐ์ดํฐ๊ฐ ์์ ํ ์ญ์ ๋๋ฏ๋ก ๋ฐ์ดํฐ ๋ณต๊ตฌ ๋ถ๊ฐ |
์ฒ์์๋ โ๊ฐ์ ๋จธ์ ์ด ์ค๊ฐ์ ๊บผ์ง ์๋ ์๋ค๋, ์ข ์ผ๋ฐํ ๊ฑฐ ์๋์ผ?โ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๋ณดํต ํด๋ผ์ฐ๋ ์๋น์ค๋ฅผ ์ด์ฉํ ๋, ํ ๋ฒ ๋ฐฐ์ ๋ ์์์ ์ธ์ ๋ ์ง ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ธฐ ๋ง๋ จ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง Azure Spot ์ธ์คํด์ค์ ๋ณธ๋ ๋ชฉ์ ์ Azure์ ๋จ๋ ์์์ ์ ๋ ดํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์์ ์ค์ ์ ๋๊ณ ๋ค์ ์๊ฐํด๋ณด๋ฉด ์ด ์์คํ ์ ์ฌ์ฉ์์ Azure ๋ชจ๋์๊ฒ ์ด๋์ด ๋๋ ์์(win-win) ๊ตฌ์กฐ๊ฐ ๋ถ๋ช ํ๋ค.
์ฌ์ฉ์ ์ ์ฅ์์ ๋ณด๋ฉด Spot ์ธ์คํด์ค๋ฅผ ์ด์ฉํ๋ฉด ์๋นํ ๋น์ฉ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๋๋ฆด ์ ์๋ค. ํด๋ผ์ฐ๋ ์์์ ์ฅ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋น์ฉ์ด ์ ์ง ์๊ฒ ๋ถ๋ด๋ ์ ์์ง๋ง ์ด๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ฉด ํ์ํ ์์์ ํจ์ฌ ์ ๋ ดํ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ ์ ์๋ค. ํนํ, ์งง์ ์๊ฐ ๋์ ์์์ ์ฌ์ฉํ๋ ํ ์คํธ ์์ ์ด๋ ์ผ์์ ์ธ ํ๋ก์ ํธ์ ๋งค์ฐ ์ ํฉํ๋ค. ์์์ ์ธ๊ธํ โMaximum price you want to pay per hour(USD)โ ์ต์ ์์ ์ค์ ํ ์ ์๋ค.
ํํธ, Azure ์ ์ฅ์์ ๋ณด๋ฉด Spot ์ธ์คํด์ค๋ฅผ ํตํด ๋จ๋ ์์์ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๋ค. ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต์๋ ํญ์ ๊ณ ๊ฐ ์์์ ๋ฐ๋ผ ์์์ ์ ๋์ ์ผ๋ก ์ด์ํด์ผ ํ๊ธฐ์ ์ผ์ ๋์ ๋จ์ ์์ ์๋ฐ์ ์๋ค. ๋จ๋ ์์์ ๊ทธ๋๋ก ๋๋ฉด ์๋ฌด๋ฐ ์์ต์ ๋ด์ง ๋ชปํ๊ฒ ์ง๋ง, Spot ์ธ์คํด์ค๋ฅผ ํตํด ์ด๋ฅผ ์ ๋ ดํ๊ฒ ๋น๋ ค์ค์ผ๋ก์จ ์์ต์ ์ฐฝ์ถํ ์ ์๋ ๊ธฐํ๊ฐ ๋๋ค. ๋ Spot ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ฉด์ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๋ ์ด์ ๋ ์๋๋ฐ ์ค์ํ ์์ ์ ์ํด ๋์ ๊ฐ๊ฒฉ์ ์ง๋ถํ๋ ์ฌ์ฉ์์๊ฒ๋ ์์ ์ ์ธ ์์์ ์ ๊ณตํ๋ฉด์ ๊ทธ ์ธ ๋จ๋ ์์์ ๋ฎ์ ๊ฐ๊ฒฉ์ ์ ๊ณตํด ์ ์ฒด์ ์ธ ์์ ํ์ฉ๋๋ฅผ ๊ทน๋ํํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์๋ ๋น์ฉ์ ์ ์ฝํ ์ ์๊ณ , Azure๋ ๋จ๋ ์์์ ํ์ฉํด ์์ต์ ์ฐฝ์ถํ ์ ์์ผ๋ ์ด ์์คํ ์ ์์ชฝ ๋ชจ๋์๊ฒ ์ด์ต์ด ๋๋ ๊ตฌ์กฐ๋ค. ์ด๋ ๊ฒ ์ดํดํ๊ณ ๋๋ ์ด์ฉ์ง ๋ ์ผ๋ฐํด์ง๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค!
Spot ์ธ์คํด์ค ์ด์ผ๊ธฐ๊ฐ ์๊ฐ๋ณด๋ค ๊ธธ์ด์ง๊ธด ํ์ง๋ง, ์ฌ๊ธฐ๊น์ง ๊ธ์ ์ฝ์ผ๋ฉด์ ์ ๋ฐ๋ผ์๋ค๋ฉด ๊ฐ์๋จธ์ ์ ๊ธฐ๋ณธ ์ค์ ์ ์ด๋์ ๋ ์๋ฃ ๋ ์ํ์ผ ๊ฒ์ด๋ค. ๊ทธ ๋ค์ ๋จ๊ณ๋ก๋ ๊ฐ์๋จธ์ ์ ์ ๊ทผํ ๊ถํ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค. ๋๋ ์ดํ ํฐ๋ฏธ๋๋ก ๊ฐ์๋จธ์ ์ ์ ๊ทผํ ์์ ์ด๊ธฐ ๋๋ฌธ์ SSH ๋ฐฉ์์ ์ ํํ๋ค.
1.3 ๐ ๏ธ How to Solve the vCPU Quota Exceeded Issue
์ ์์ ์ธ ์ํฉ์ด๋ผ๋ฉด ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ๊ฐ์๋จธ์ ์ด ์์ฑ๋๋ ๊ฒ์ด ๋ง๋ค. ๊ทธ๋ฐ๋ฐ ๋๋ ์๋์ ๊ฐ์ ํธ๋ฌ๋ธ์ด ๋ฐ์ํ๋ค. ์ค๋ฅ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์๋ค.
โOperation could not be completed as it results in exceeding approved Low-priority quota.โ
๊ฒฐ๋ก ์ ๋ด๊ฐ ์ง์ ํ Korea Central ์ง์ญ์์ ์ฌ์ฉํ ์ ์๋ vCPU ์์์ ํ๋๋ฅผ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ์๋ค. Azure์์๋ ๊ฐ ์ฌ์ฉ์์๊ฒ ์์์ ๋ํ ์ฟผํฐ(Quota)๋ฅผ ํ ๋นํ๋๋ฐ, ์ด ์ฟผํฐ๋ ํ์ํ ๋ ์ฆ์ก ์์ฒญ์ ํ ์ ์๋ค. Korea Central ์ง์ญ์ ๊ธฐ๋ณธ Quota๋ 3๊ฐ์ด๋ค. ๋๋ ํ๋๋ฅผ ๋ ์ถ๊ฐํด์ ์ด 4๊ฐ๋ฅผ ์์ฒญํ๋ค.
์ญ๋ถ ์ ๋ ์ง๋๋ ์น์ธ์ด ์ ์์ ์ผ๋ก ๋์๊ณ , ์๋ฌ ์์ด ๋๋์ด ๋ด ์ฒซ ๊ฐ์๋จธ์ ์ด ์์ฑ๋์๋ค! ์ด์ ํค๋ง ๋ค์ด๋ฐ์ ์ฃผ๋ฉด ๋๋ค. ์ด ํค๋ ๋ด๊ฐ ๋ง๋ ๊ฐ์๋จธ์ ์ ์ ๊ทผํ๊ธฐ ์ํ ํค๋ก ์ดํ SSH๋ฅผ ์ด์ฉํด ์ ์ํ ๋ ํด๋น ํค์ ์ด๋ฆ, ํ์ผ ์์น, ์ ์ ์ด๋ฆ ๋ฑ์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ์ด ํค๋ฅผ ๋ก์ปฌ์ ๋ค์ด ๋ฐ์ ํ ๋ด๊ฐ ์ํ๋ ์์น์ ์ ์ฅํ๋ฉด ๋๋๋ฐ โsshโ๋ผ๋ ์ด๋ฆ์ ํด๋๋ก ํค๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. (๋์ค์ ์ถ๊ฐ๋ก ์์ฑํ ๊ฐ์๋จธ์ ํค๋ค๋ ssh ํด๋์ ๋ฃ์ด์ ํ๋ฒ์ ๊ด๋ฆฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค!)
1.4 ๐ฆ Resource Group: Manage All Resources Related to Your VM at Once
๊ฐ์ ๋จธ์ ์ ์์ฑํ ๋, Resource Group์ด๋ผ๋ ๊ฐ๋ ์ด ์ฒ์์๋ ๋ค์ ์์ํ๊ฒ ๋๊ปด์ง ์ ์๋ค. ์๋ํ๋ฉด ๋๋ ๋ถ๋ช ๊ฐ์ ๋จธ์ ์ ์์ฑํ๋๋ฐ ์๋์ผ๋ก Resource Group์ด๋ผ๋๊ฒ ์์ฑ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ๋ก ๋ด๊ฐ ์์ ๋ง๋ ๊ฐ์ ๋จธ์ ์ ์ด๋ฆ์ โkaggle-linux-gpu-vmโ์ด๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Azure๋ ์๋์ผ๋ก โkaggle-linux-gpu-vm_groupโ์ด๋ผ๋ ์ด๋ฆ์ ๋ฆฌ์์ค ๊ทธ๋ฃน์ ๋ง๋ค์ด๋๋ค. ๋๋ ์ด ๋ฆฌ์์ค ๊ทธ๋ฃน์ ๋์ฒด ๋ญ๊ฐ ๋ค์ด์๋๊ฑด์ง ํ์ธํด๋ณด๊ธฐ๋ก ํ๋ค. ์๋ ์ฌ์ง์ ๊ฐ์ด ๋ณด๋ฉด์ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค!
โkaggle-linux-gpu-vm_groupโ์ด๋ผ๋ ์ด๋ฆ์ ๋ฆฌ์์ค ๊ทธ๋ฃน ์์ ๊ฐ์ ๋จธ์ ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ง ๊ด๋ จ๋ ๋ฆฌ์์ค๋ค์ด ํจ๊ป ๊ด๋ฆฌ๋๊ณ ์๋ ๊ฑธ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ ๊ฐ์ ๋จธ์ (Virtual Machine) ์ธ์๋, ๋คํธ์ํฌ ์ธํฐํ์ด์ค, ๊ณต์ฉ IP ์ฃผ์, ๋์คํฌ, SSH ํค ๋ฑ์ด ํฌํจ๋์ด ์๋ค. ์ด ๋ชจ๋ ๋ฆฌ์์ค๊ฐ kaggle-linux-gpu-vm_group์ด๋ผ๋ ํ๋์ ๊ทธ๋ฃน์ ์ํด ์๋ ๋๋ถ์, ํ ๊ณณ์์ ํ๊บผ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ฌ์ค ๋๋ โํ๊บผ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.โ ๋ผ๋ ๋ฌธ์ฅ๋ง ์ฝ์ด์๋ ๋ญ๊ฐ ์๋ฟ์ง ์์๋ค. ๊ทธ๋์ ๋ด ๋๋ฆ์ ๋ฐฉ์๋๋ก ๋ค์ ์ดํดํด๋ณด๋ ์ด๋ ๊ฒ ์ดํดํ ์ ์์๋ค. ๋ง์ฝ ๋ด๊ฐ ๊ฐ์ ๋จธ์ ์ ์ญ์ ํ๊ฑฐ๋ ์์ ํ๊ณ ์ถ์ ๋ฐ, ๊ทธ์ ๊ด๋ จ๋ ๋คํธ์ํฌ, IP ์ฃผ์, ๋์คํฌ ๊ฐ์ ๊ฒ๋ค์ ํ๋ํ๋ ๋ฐ๋ก ์์ ํด์ผ ํ๋ค? ๊ทธ๊ฑด ๋๋ฌด ๋๊ณต์ฌ ์ผ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ ๋ฆฌ์์ค ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ฉด ์์ค๋ฅผ ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋๋ค. ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช ํ์๋ฉด ๊ฐ์ ๋จธ์ ์ ์ญ์ ํ๊ณ ์ถ์ ๋ ์ผ์ผ์ด ๋ชจ๋ ๊ด๋ จ๋ ์์์ ์ญ์ ํ๋ ๊ฒ ์๋๋ผ, ๋ฆฌ์์ค ๊ทธ๋ฃน ํ๋๋ง ์ญ์ ํ๋ฉด ๊ทธ ์์ ์๋ ๋ชจ๋ ๋ฆฌ์์ค๋ ํจ๊ป ์ญ์ ๋๋ ๊ตฌ์กฐ์ธ ๊ฒ์ด๋ค.
๊ฒฐ๋ก ์ ๋ฆฌ์์ค ๊ทธ๋ฃน์ ๊ฐ์ ๋จธ์ ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์์์ ํ๋์ ๋ณด๊ณ , ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ์์ฃผ ์ ์ฉํ ๋๊ตฌ์ธ ๊ฒ์ด๋ค!
2. Connect to VM (Virtual Machine)
์ ์ด์ ๋ ์ง๊ธ๊น์ง ๋ด๊ฐ ๋ง๋ ๊ฐ์๋จธ์ ์ ๋์ ๋ก์ปฌ๊ณผ ์ฐ๊ฒฐํ ์๊ฐ์ด๋ค. CLI ๋ฐฉ์๋ ์ง์ํ๋ ๊ฒ ๊ฐ์๋ฐ, ๋๋ ์์ ๋ฐ๊ธ๋ฐ์ ํค๋ฅผ ์ด์ฉํด์ ํฐ๋ฏธ๋๋ก ์ฐ๊ฒฐ์์ผ ๋ณด์๋ค. ๋ก์ปฌ๊ณผ ์ฐ๊ฒฐํ๋ ๋ช
๋ น์ด๋ ์น์ ํ๊ฒ ์ ๋์ ์์ผ๋ ์นดํผํด์ ํฐ๋ฏธ๋์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด ๋๋ค. ์ฐธ๊ณ ๋ก ssh -i ~/.ssh/id_rsa.pem username@ip์ฃผ์
์ด ๋ช
๋ น์ด๋ ๋งค์ฐ ์์ฃผ ์ฐ๊ฒ ๋๋ ์ ๊ธฐ์ตํด ๋๋ ๊ฒ์ด ์ข๋ค. (๋ค๋ก๊ฐ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ธ์์ง ๊ฒ๋๋ค!๐)
ssh -i ~/.ssh/id_rsa.pem username@ip์ฃผ์
์ด ๋ช
๋ น์ด๋ ๋ด๊ฐ ์ ์ฅํ ๊ฐ์๋จธ์ ํค๊ฐ ์ ์ฅ๋ ์์น์์ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋๋ /Users/kimseohee/Arielle_key/ssh ๊ฒฝ๋ก์ ํค(.pem)๋ฅผ ์ ์ฅํด ๋์๊ธฐ ๋๋ฌธ์ ๋จผ์ ํด๋น ๊ฒฝ๋ก๋ก ์ง์
ํ๋ค.
์ดํ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋๋ฐ ์ฐธ๊ณ ๋ก ~/.ssh/id_rsa.pem ์ด ๋ถ๋ถ์๋ ๋ด๊ฐ ๋ณด์ ํ ํค ์ด๋ฆ์ ์ ์ผ๋ฉด ๋๋ค.
์๋๋ ํด๋น ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์์ ์ผ๋ก ๊ฐ์๋จธ์ ์ ์ ๊ทผ์ด ๋๋๊ฒ ๋ง๋ค. ๊ทธ๋ฐ๋ฐ ๋ด ๋ก์ปฌ์์๋ โPermissions 0644 for โkaggle-linux-gpu-vm_key.pemโ are too openโ ๊ฒฝ๊ณ ๊ฐ ๋ด๋ค. ์ด๋ ํด๋น ํค ํ์ผ์ด ์์ ์ ์ด์ธ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ค๋ ์ฝ์ ์ ์๋ค๋ ๋ป์ผ๋ก ํค์ ๋ํ ๋ณด์์ ๊ฐํํ๋ผ๋ ์๋ฏธ์๋ค.
๊ทธ๋์ ๋๋ chmod 600 kaggle-linux-gpu-vm_key.pem
๋ช
๋ น์ด๋ก ํค์ ๋ํ ๊ถํ์ ์์ ํด ์ฃผ์๋ค. ์ฐธ๊ณ ๋ก 600 ๊ถํ์ ํ์ผ ์์ ์์๊ฒ๋ง ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๊ถํ์ ๋ถ์ฌํ๊ณ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ๋ ์ด๋ ํ ๊ถํ๋ ๋ถ์ฌํ์ง ์๋ ๋ฐฉ์์ผ๋ก SSH์์ ์๊ตฌํ๋ ๋ณด์ ์ ์ฑ
๊ณผ ์ผ์นํ๋ค.
์ดํ ๋ค์ ๋ก์ปฌ์์ ๊ฐ์๋จธ์ ์ ์ฐ๊ฒฐํด ๋ดค๋๋ โSystem restart requiredโ ์๋ ์ฒ๋ผ ์ ์คํ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
2.1 ๐ณ Understanding Docker and GPU in the Cloud Environment
ํด๋ผ์ฐ๋ ์ด์ผ๊ธฐ๋ฅผ ๊ณ์ ํ๊ณ ๋ ์์ง๋ง ์ด ํฌ์คํ ์๋ฆฌ์ฆ์ ์ฃผ์ ๋ Docker์ด๋ค. ๊ฐ์๋จธ์ ์์๋ Docker๋ฅผ ํ๋ฒ ์คํ์์ผ ๋ณด์๋ค. ์ ์๊ฐํด๋ณด๋ฉด Docker๋ฅผ ๋ก์ปฌ์๋ ์ค์นํ์ง๋ง ๊ฐ์๋จธ์ ์๋ Docker๋ฅผ ์ค์นํ ๊ธฐ์ต์ด ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๊ฐ์๋จธ์ ์์ Docker๊ฐ ์๋ํ ์ ์์์๊น?
๊ทธ ์ด์ ๋ ๊ฐ์๋จธ์ ์ ๋ง๋ค ๋ ์ ํํ ์ด๋ฏธ์ง ๋๋ฌธ์ด๋ค. ๊ฐ์๋จธ์ ์ ๋ง๋ค ๋ โNVIDIA GPU-Optimized VMI -v23.09.1-64 Gen2โ๋ผ๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํ์๋๋ฐ, ์ด ์ด๋ฏธ์ง์ ์ด๋ฏธ Docker๊ฐ ์ค์น๋ ์ํ์๋ ๊ฒ์ด๋ค. ์ด๋ฐ ์ ์์ ํด๋ผ์ฐ๋ ์์์์ ์์ ํ๊ฒฝ์ ์ ๋ง ํธ๋ฆฌํ๋ค๊ณ ์๊ฐํ๋ค. ์ต์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๊ธฐ๋ง ํ๋ฉด ์์ ์ ์์ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๋๊ตฌ๊ฐ ์ด๋ฏธ ์ค๋น๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ถ๊ฐ๋ก โsudoโ๋ฅผ ๊ณ์ ์
๋ ฅํ๊ธฐ ๊ท์ฐฎ์์ sudo usermod -aG docker Username
๋ช
๋ น์ด๋ฅผ ํตํด Docker ๊ทธ๋ฃน์ ์ฌ์ฉ์๋ฅผ ์ง์ ์ถ๊ฐํด ์ฃผ์๋ค. ์ฌ๊ธฐ์ usermod
๋ ์ฌ์ฉ์ ๊ณ์ ์ ์์ ํ๋ ๋ช
๋ น์ด์ด๋ฉฐ, -aG
๋ ์ฌ์ฉ์๋ฅผ ํน์ ๊ทธ๋ฃน์ ์ถ๊ฐํ ๋ ์ฌ์ฉํ๋ ์ต์
์ด๋ค. ๋ง์ง๋ง์ docker
๋ ๊ทธ๋ฃน ์ด๋ฆ, Username
์ ๋ด ์ฌ์ฉ์ ์ด๋ฆ์ ๋ฃ์ผ๋ฉด ๋๋ค.
๋ด๊ฐ ๋ง๋ ๊ฐ์๋จธ์ ์ NVIDIA GPU๋ฅผ ํ์ฌํ๊ณ ์๋ค. ์๋์ฒ๋ผ ๋ช ๋ น์ด๋ฅผ ํตํด ๊ฐ์๋จธ์ ์ GPU ์ฌ์ฉ๋์ ํ์ธํ ์๋ ์๋ค. ์๋ ์ฌ์ง์ ๋จ์ํ ๊ฐ์๋จธ์ ์์ GPU๋ง ํ์ธํ ๊ฒ์ด๊ณ โ Standard_NC4as_T4_v3โ๊ฐ ์ค์น ๋์ด ์๊ณ , ํ์ฌ ์ด๋ค ํ๋ก์ธ์ค๋ ์คํ๋์ง ์์ ์ํ์ด๋ค.
2.2 ๐ณ Using GPU in Docker Containers
๐จย ์ง๊ธ ์ด ๋ถ๋ถ์ ์ง์คํด์ ๋ด์ผํ๋ค. ์ ์ฌ์ง์ด๋ ์๋ ์ฌ์ง์ด๋ ์ฐจ์ด์ ์ ์ฐพ์ ์ ์์ด์ผ ํ๋๋ฐ, ํนํ Docker ์ปจํ ์ด๋์์ GPU๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด ์ด์ผ๊ธฐํด๋ณด๊ณ ์ ํ๋ค.
์๋ ์ฌ์ง์ docker run --rm --gpus all ubuntu nvidia-smi
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ปจํ
์ด๋ ์์์ GPU ์ํ๋ฅผ ํ์ธํ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ ํฌ์ธํธ๋ Docker ์ปจํ
์ด๋๊ฐ ์ผ๋ฐ ๊ฐ์๋จธ์ ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋
๋ฆฝ๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค๋ ์ ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก Docker ์ปจํ
์ด๋๋ ํธ์คํธ ์์คํ
(์ฌ๊ธฐ์๋ ๊ฐ์๋จธ์ )์ ์์์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ Docker๊ฐ ๊ฐ์๋จธ์ ์ GPU ์์์ ์ปจํ
์ด๋์ ๊ณต์ ํด ์คฌ๊ธฐ ๋๋ฌธ์, ์ปจํ
์ด๋ ๋ด๋ถ์์๋ GPU ์ํ๋ฅผ ํ์ธํ ์ ์์๋ ๊ฒ์ด๋ค. ์ฆ, Docker ์ปจํ
์ด๋๊ฐ GPU์ ์ ๊ทผํ ์ ์๋๋๋ ๊ฒ์ด ์ด ๊ณผ์ ์ ํต์ฌ ํฌ์ธํธ์ด๋ค.
- Docker ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์คํธ ์์คํ ๊ณผ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ ์ ๊ณตํ์ง๋ง, docker run โgpus ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋์์๋ GPU ์์์ ์ฌ์ฉํ ์ ์๋ค!
- ๋ ๋ฆฝ์ ์ธ ํ๊ฒฝ์์๋ GPU ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค!
- ์ด๋ฅผ ํตํด ๋ฅ๋ฌ๋ ์์ ์ Docker ์ปจํ ์ด๋ ๋ด๋ถ์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค!
3. Connect to GUI via RDP (MAC)
์ผ๋ฐ์ ์ผ๋ก Azure์์ ์ ๊ณตํ๋ ๋ฆฌ๋ ์ค ๊ฐ์๋จธ์ ์ ๋ฐ์คํฌํฑ ํ๊ฒฝ์ด ์ค์น๋์ด ์์ง ์๋ค. ๋ฆฌ๋ ์ค VM์ ์ฃผ๋ก SSH ์ฐ๊ฒฐ์ ํตํด ๋ช ๋ น์ด ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ GUI๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ ์ ์งํํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ๋ถ๋ช GUI ํ๊ฒฝ์ ์ค์นํ๋ฉด ๋ ์ง๊ด์ ์ผ๋ก ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฑฐ๊ธฐ์ ์ค๋ ์ด์ ์ด ๋ถ๋ช ์๋ค. ๋๋ MAC์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Window App(Microsoft Remote Desktop) ์ฑ์ ์ด์ฉํด ์ฐ๊ฒฐ์ ์๋ํ๋ค.
์ถ๊ฐ๋ก ๊ฐ์ํ๊ฒฝ์ Chrome, Visual Studio Code๋ฅผ ์ค์นํด ์ฃผ์๋ค.
3.1 ๐ Connecting VSCode and GitHub
๋จผ์ ๊ฐ์ ํ๊ฒฝ์์ VSCode๋ฅผ ์ฌ์ฉํด GitHub๊ณผ ์ฐ๋์์ผฐ๋ค. ๊ทธ๋ฆฌ๊ณ Remote - Tunnels ์ด๋ผ๋ ํ์ฅ ํ๋ก๊ทธ๋จ๋ ์ค์นํ๋ค. ๋ณดํต์ ์๊ฒฉ ์๋ฒ์ ์ ์ํ๋ ค๋ฉด SSH ์ค์ ๊ฐ์ ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ์ง๋ง, ๋ฆฌ๋ชจํธ ํฐ๋์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๊ณผ์ ์ด ํจ์ฌ ๊ฐ๋จํด์ง๋ค.
๊ทธ๋ฐ๋ฐ ์ ์ ์๊ฐํด๋ณด๋ฉด ์กฐ๊ธ ๋ชจ์?์ ์ธ ๋ด์ฉ์ด ์๋ค. โYou can then securely connect to that machine from anywhere, without the requirement of SSHโ. without the requirement of SSH ์ด ๋ถ๋ถ์ด ๋ง์ผ๋ฉด์๋ ํ๋ฆฐ ์๊ธฐ์ด๋ค. (๋๋ ํ๋ฆฐ์ชฝ์ ๋ ๊ฐ๊น๋ค๊ณ ์๊ฐํ๋ค.) ์ด ๋ฌธ์ฅ์ ๋ฆฌ๋ชจํธ ํฐ๋์ ์ฌ์ฉํ๋ฉด SSH ์ค์ ์์ด๋ ์๊ฒฉ ์๋ฒ์ ์ ์ํ ์ ์๋ค๋ ์๋ฏธ๋ก ํด์๋ ์ ์๋๋ฐ, ์ค์ ๋ก๋ ์ฝ๊ฐ ์ ๋งคํ ๋ถ๋ถ์ด ์๋ค.
๊ฐ์๋จธ์ ๊ณผ ๋ก์ปฌ ํ๊ฒฝ ๊ฐ์ SSH ์ฐ๊ฒฐ์ด ๋๊ธด ํ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ฆฌ๋ชจํธ ํฐ๋ ์ญ์ ๋ ์ด์ ์ฐ๊ฒฐ์ ์ ์งํ์ง ๋ชปํ๋ค. SSH ์ฐ๊ฒฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํฐ๋์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋์ด๋ฒ๋ฆฌ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์๋จธ์ ๊ณผ์ ์ ์๋ ๋์ด์ง๋ ๊ฒ ๊ฐ๋ค. ๋ฐ๋ผ์ โSSH ์์ดโ ์ฐ๊ฒฐํ ์ ์๋ค๋ ์ค๋ช ์ ์ผ๋ฐ์ ์ธ SSH ์ธ์ฆ ๊ณผ์ ์ ๊ฑด๋๋ธ ์ ์๋ค๋ ์๋ฏธ๋ก ๋ฐ์๋ค์ด๋ ๊ฒ์ด ์ ์ ํด ๋ณด์ธ๋ค. ๊ทธ๋ฌ๋ ์๋ฌดํผ SSH ์์ฒด๊ฐ ํ์ ์๋ ๊ฒ์ ์๋๊ณ ์ฌ์ ํ SSH๋ ๋ณด์ ์ฐ๊ฒฐ์ ๊ทผ๋ณธ์ ์ธ ์ญํ ์ ํ๋ ๊ฒ์ ๋ถ๋ช ํ๋ค (์ด ๋ถ๋ถ์ ์กฐ๊ธ ๋ ํด๋ผ์ฐ๋&๋์ปค ๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ ์ ๋ฆฌํด์ ๊ด๋ จ ํฌ์คํ ์ ์ ๋ก๋ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.)
Reference
Subscribe via RSS