본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

Personal/Tip

RunPod 사용해보기: ssh 키 등록, pod 만들기, workload 선택

RunPod

AI, 머신러닝 및 일반 컴퓨팅 요구 사항을 위해 구축된 클라우드 컴퓨팅 플랫폼

시간당 0.29달러 (400원) 정도에 최상급 GPU를 빌려 쓰는 가성비

간편한 세팅

가벼운 작업은 저렴한 GPU, 고해상도 영상생성은 RTX 4090이나 5090같은 괴물 성능의 GPU로 바꿔가며 쓸 수 있다. 

 

 

 

(선택) ssh 키 등록. 하려면 pod만들기 전에 수행한다. 

 

 

 

ssh -V

OpenSSH_for_Windows_9.x등으로 출력되면 SSH를 사용할 수 있다. 

 

 

 

 

cd $HOME

mkdir .ssh -Force

cd .ssh

pwd

ssh-keygen -t ed25519 -C "sanghee2411@gmail.com"

enter

enter

enter

 

 

 

 

Get-Content $HOME\.ssh\id_ed25519.pub

 

 

 

runpod 접속 - settings - ssh - 등록

 

 

 

 

 

 

 

본격적으로 시작해보자. Pod 메뉴에 접속 각 아코디언메뉴는 아래를 의미한다 .

Workload 어떤 소프트웨어 환경으로 실행할 것인가?

Compute (GPU) 어떤 하드웨어를 사용할 것인가?

Region 어느 데이터센터에서 돌릴 것인가?

Storage 얼마나 저장할 것인가?

 

 

 

 

 

 

(선택) workload는 탬플릿과 같다. 이해를 하고싶다면 읽어보자.------------------------------------------- start

템플릿: Pod가 실행될 컨테이너 이미지를 선택

RunPod
│
├── 공식 Workload
│    ├── RunPod PyTorch
│    ├── TensorFlow
│    └── vLLM
│
└── Community Workload
     ├── 사용자가 만든 PyTorch 환경
     ├── 특정 LLM용 환경
     ├── 특정 WebUI 환경
     └── 특정 라이브러리 포함 환경
  공식 Community
제작 RunPod 사용자
안정성 높음 편차 있음
설정 기본 제공 목적별 커스텀
추천 처음 시작 특정 작업
PyTorch vLLM, ComfyUI, 특수 환경

 

 

 


공식 플랫폼을 선택하면 추가옵션이 보이고 커뮤니티( 누군가 만들어둔 Docker 환경 설정 )의 경우 옵션이 표시되지않는다. 

환경설정 옵션 설정 단계
서브메뉴없이 바로 적용되버린다.

 

 

 

처음부터 배우거나 직접 구성할 때는 공식 Workload 추천된다.

Ubuntu+ CUDA+ PyTorch+ Python+ Jupyter 정도만 준비된 깨끗한 환경에서 시작하며 위에 내가 여러가지를 설치하며 원하는 환경을 만들어가는 방식이다 .

pip install transformers
pip install peft
pip install accelerate
pip install datasets

 

 

 

 

누군가가 나는 Llama + vLLM 서버를 바로 실행하고 싶다라 해서 환경을 만들어 공개했다면 그저 선택해 deploy후 바로 실행이 가능하다. 다만 어떤 패키지가 설치되었는지 버전충돌은 안나는지 오래된 이미지는 아닌지, 보안은 어떠한지검토가 필요하다 .

이 허술함을 이해해보려면 실제로 여러 템플릿을 조회해보자. api key를 그대로 노출해버리는 경우가 허다하다

 

 

반대로 공식 overrides 도 확인해보자. 기본설정만 들어가있어 보안이 보장된다. reame도 말끔하다. 

 

 

상세설명도 확인해보자 .

 

(선택) workload는 탬플릿과 같다. 이해를 하고싶다면 읽어보자.------------------------------------------- end

 

 

 

 

 

 

(선택) pod의 구성요소를 이해해보자.

오른쪽에 pod의 상세스펙이 보인다. 

RTX 5090 32GB는 최신 고성능 GPU

이름을 읽고 vLLM이 미리 설치된 LLM 추론(Inference) 용 환경이라고 유추한다 .

RTX 5090 GPU 종류 1x RTX 5090 GPU를 1개를 사용하고 모델은 NVIDIA RTX 5090이다. 
32GB VRAM 중요하다. VRAM = GPU 메모리 모델 크기와 관련된다.  32정도면 꽤 좋은 편이다 .

60GB RAM CPU 메모리 60GB면 충분한 편 15코어면 학습용으로 괜찮다.

15 vCPU CPU 코어 개수

vllm-latest
1x RTX 5090
32GB VRAM · 60 GB RAM · 15 vCPU
8GB 작은 모델, 이미지
16GB 작은 LLM, LoRA 일부
24GB 7B QLoRA 가능
32GB 7B~14B QLoRA 여유
48GB 큰 모델 파인튜닝
80GB 대형 모델

 

 

 

 

 

 

 

(선택)  해당 워크로드 세부설정을 수정방법도 확인해보자.

template워크로드릐 세부설정을 수정하는 부분

vllm/vllm-openai:latest Docker 이미지

Container start command vLLM 실행용

--host 0.0.0.0 외부 접속 허용

--port API 서버 포트

--model 여기서는 Llama 3.1 8B Instruct 을 다운로드해서 실행

--dtype 데이터 타입:

  • FP32 → 정확하지만 메모리 많이 사용
  • FP16 → 절반 메모리
  • BF16 → LLM에서 많이 사용

--gpu-memory-utilization GPU VRAM의 95%까지 사용

 

--api-key

--max-model-len 최대 context 길이

Container disk 임시 저장 공간. Pod 종료하면 삭제된다.

Volume disk 영구 저장 공간 Pod를 재시작해도 유지된다. 

Volume mount path 저장 위치

Expose HTTP ports 8000 외부 HTTP 접근 허용

Expose TCP ports SSH 접속 포트

내가 만든 LLM을 API 서버로 띄우고 FastAPI 챗봇 연결에 맞는 설정.

 

 

 

 

 

 

 

지역설정하기

 

 

 

compute 설정하기

필터를 사용하면 금액별 오름차순, 내림차순이 가능하다. 

out of capacity는 이미 사용자들이 모두 사용중인 자원으로 가능할때, 빈자리가 났을때 사용할수있다. 

out of capacity 가 너무 많은 경우 tab available을 누르자. 필터링할 수 있다 

 

 

 

 

 

(선택) gpu수도 늘려보자. 오른쪽 summary card에 실시간으로 금액이 바뀌고있는것을 확인할수 있다. 

 

 

 

스토리지

Pods는 두가지 유형의 저장방식을 제공한다. 

컨테이너 디스크 기본 저장소 pod가 중지될때마다 초기화

영구 저장소 Pod에 직접 연결된 디스크로 Pod가 중지되거나 다시 시작될때 유지되지만 Pod가 종료될때는 삭제되는 볼륨디스크, Pod와 독립적으로 존재하는 영구 저장소로 시간이 지남에 따라 동일한 볼륨을 여러 Pod에 연결할 수 있는 네트워크 볼륨, 

 

 

 

 

 

(선택) 스토리지를 강제로 수를 줄여보자. 

권장사이즈를 알려주며 경고해준다.

 

 

 

 

 

기본세팅을 완료했다 .

deploy pod

import torch

print("PyTorch version:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())

if torch.cuda.is_available():
    print("GPU:", torch.cuda.get_device_name(0))
    print("VRAM:", torch.cuda.get_device_properties(0).total_memory / 1024**3, "GB")

 

 

 

 

조금 기다리면 pod가 활성화된다. 

 

 

 

 

 

 

pod를 정지시켜보자.

pod정지시 일부 메뉴들이 비활성화되는것을 확인했다. 조회만 가능하도록 메뉴가 바뀌어있다. 

 

 

 

 

template detail에는 앞서 확인한 reame가 들어있다 

 

 

 

 

 

 

 

 

반대로 시작해보자.

 

 

 

메뉴들이 다시 활성화되었다 .

 

 

쥬피터 노트북이 준비되면 접속해보자 .

 

 

 

 


RunPod의 PyTorch 이미지는 보통 PyTorch, CUDA, Python, 기본 라이브러리를 제공하는것이 핵심이고 jupyter가 뜨려면 jupyter가 설치되고 + 실행중이어야한다.

 

 

 

만약 뜨지않는다면 아래를 수행하자. 

현재 Pod에 직접 Jupyter 설치하자. 

connect - web terminal - 활성화 - open web terminal

pip install jupyterlab
jupyter lab --ip=0.0.0.0 --port=8888 --allow-root

 

 

 

 

다시 돌아가 실행

 

 

 

 

완료

 

 

 

 

 

 

gpu를 확인해보자. 

선택했던 gpu와 일치한다 

import torch

print("PyTorch version:", torch.__version__)
print("CUDA 사용 가능:", torch.cuda.is_available())

if torch.cuda.is_available():
    print("GPU 이름:", torch.cuda.get_device_name(0))
    print("VRAM:", torch.cuda.get_device_properties(0).total_memory / 1024**3, "GB")

 

 

 

 

추가로 더 테스트해보고싶다면 아래 코드를 실행하자 .

gpu가 실제로 일하는지 테스트

import torch
import time

device = "cuda"

a = torch.randn(5000, 5000).to(device)
b = torch.randn(5000, 5000).to(device)

start = time.time()

c = torch.matmul(a, b)

torch.cuda.synchronize()

print("계산 완료")
print("걸린 시간:", time.time() - start)
print(c.shape)

 

 

gpu 상태보기

!nvidia-smi

 

 

 

작은 모델 하나 올려보기

!pip install transformers accelerate -q

 

from transformers import pipeline

generator = pipeline(
    "text-generation",
    model="distilgpt2",
    device=0
)

result = generator(
    "AI is",
    max_length=50
)

print(result[0]["generated_text"])

 

 

 

 

 

pod를 중지시키면 당연하지만 이 jupyter를 쓸 수 없다 .

 

 

 

 

 

pod를 삭제해보자 .

teminate pod

 

 

 

 

 

완료

 

 

 

billding메뉴로 접속해 이 테스트 중 소비한 금액을 확인해보자. 

0.002 싼값에 잘 테스트했다!

 

 

 

 

 

 

 


(선택) 로그인을 쉽게하려면 패스키를 저장하자. 

 

 

 

 

 

(선택) 보안에 신경쓰고싶다면 MFA를 추가하자.

Secure your account: Enable multi-factor authentication to add an extra layer of protection when you sign in.

안내는 괜히 나오는것이 아니다. 뉴스에도 몇번 나왔지만 MFA 설정을 하지않으면 해킹되 과한 사용량으로 과금될 수 있다. aws도 마찬가지다. 고객센터로 피해사실을 알리면 환불해주지만 2주이상 걸리거나 번역기를 돌려가며 상담원과 상담을 하거나 메일을 보내야하는 등의 번거로움이 존재한다. 

플레이스토어에서 authenticator 설치

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=ko

 

Google OTP - Google Play 앱

2단계 인증을 사용 설정하여 계정 도용을 방지하세요.

play.google.com

 

 

 

 

해당 qr을 앱 오른쪽 하단 카메라로 스캔하면 등록된다 .

 

 

 

앱에서 보여주는 인증숫자를 입력하고 인증완료한다 .

 

 

 

 

취소할수도있지만 그럴가능성은 없을것이다. 있어서 나쁠게 전혀없는 메뉴

 

 

 

 

 

 

(선택) 추후 github repo와 커넥션하고싶다면 연결해놓자.

 

 

 

 

 

 

(선택) runpod에도 실험실 기능이있다. 원하지않는다면 비활성화하자. 기본값은 활성이다 .

 

 

 

 

 

이제 로컬에서 runpod의 gpu를 사용해보자 .



ssh 설정 파일만들기

notepad $HOME\.ssh\config - 새파일만들기 - 예 - 이때 hostname과 port는 runpod 화면을 참고해 적는다 .
IdentityFile은 .ssh 생성한 파일/파일명까지 적기.

runpod를 재실행하면 port번호등이 바뀔수있으니 주의한다. 

(예시)

Host runpod-gpu
HostName 123.45.67.89
User root
Port 24567
IdentityFile C:/Users/사용자명/.ssh/id_ed25519
ServerAliveInterval 30
ServerAliveCountMax 120

 

 

 

이때 config를 수정하다가 .txt로 저장되어버렸다면 주의하자. 확장자가 없어야한다 .

 

 

 

파이참 - main.py 작성

# PyTorch 라이브러리를 불러옵니다.
import torch

# 현재 실행 중인 PyTorch 버전을 출력합니다.
print("PyTorch 버전:", torch.__version__)

# CUDA GPU 를 사용할 수 있는지 확인합니다.
print("CUDA 사용 가능:", torch.cuda.is_available())

# CUDA 를 사용할 수 있다면 현재 GPU 이름을 출력합니다.
if torch.cuda.is_available():
print("GPU 이름:", torch.cuda.get_device_name(0))
else:
print("사용 가능한 CUDA GPU 가 없습니다.")

 

 

 

 

파일 - 설정

 

 

설정 - 도구 - ssh 구성

 

 

 

 

 

config에서 작성했던 ip와 port를 적고 키 쌍으로 선택 - ssh 파일을 연결한뒤 테스트한다. 

 

 

참고로 ssh 파일을 연결했는데 비밀번호를 입력하라고 나온다면 config등에 문제가 있는것이니 데이터를 확인하자. 

 

 

 

powershell에서 명령해 runpod를 연결여부를 확인 할 수 도 있다 .

ssh -i ~/.ssh/id_ed25519 d566nlxls7lirs-64411861@ssh.runpod.io

 

 

 

적용 - 확인

 

 

 

 

설정 - python - 인터프리터 - 인터프리터 추가 - ssh

 

 

 

 

기존 - 등록한 ssh선택 - 다음

 

 

 

 

웹브라우저에서도 terminal을 열어 확인해볼 수 있다. 

 

 

 

 

설정 - 배포 - 매핑 - 로컬경로, 배포경로 - 확인

 

 

 

 

 

터미널 - 실행

 

 

 

 

 

jupyternotebook으로 확인했을때 프로젝트가 잘 올라왔다 .