인스턴스 — 산 시간 위에서 돌리기
풀이 보유한 시간에 배정된 노드 위에서 도는 내 컨테이너가 인스턴스예요. 노드 1대 = 인스턴스 1개(그 노드의 GPU 전부). 배정 시간이 끝나면 자동으로 파기됩니다.
만들기
인스턴스 → 인스턴스 만들기 또는:
curl -s $RERENT/v1/instances -H "Authorization: Bearer $RERENT_TOKEN" -H 'content-type: application/json' -d '{
"pool":"default","count":1,"name":"train-llama",
"image":"pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel",
"mode":"ssh","startup_script":"pip install -U transformers\n",
"env":{"HF_TOKEN":"hf_…"},"ports":[8000],"priority":3
}'
| 항목 | 뜻 |
|---|---|
| pool | 어느 풀의 시간 위에 띄울지 |
| sku | 풀에 SKU가 하나면 생략 |
| count | 몇 개(1~64). 배정된 노드 수까지만 동시에 뜨고 나머지는 대기 |
| image | 도커 이미지. 공개 레지스트리(Docker Hub·NGC·GHCR). GPU 드라이버는 노드 것이라 CUDA 12.x 이미지 권장. 프리셋은 GET /v1/instances/presets |
| mode | ssh(기본): sshd가 주 프로세스, 조직 SSH 공개키로 root 접속 · custom: 이미지의 명령(또는 command)이 주 프로세스, SSH 없음 |
| startup_script | ssh 모드에서 컨테이너가 뜨면 백그라운드로 실행(/root/rerent-startup.log) |
| command | custom 모드의 주 프로세스 명령(셸 한 줄 또는 배열) |
| env | 환경변수. RERENT_*·NVIDIA_* 접두는 예약 |
| ports | 노드 공인 IP의 임의 포트로 열 컨테이너 포트(22는 ssh 모드가 써요). 열린 포트는 인스턴스 응답의 ports 와 노드 접속 정보로 확인 |
| priority | 1(낮음)~4(최우선). 노드보다 인스턴스가 많으면 높은 것부터 시작, 할당이 줄면 낮은 것부터 종료 |
컨테이너 안에는 RERENT_INSTANCE_ID RERENT_POOL RERENT_SKU RERENT_GPU_COUNT 가 환경변수로 들어가요.
상태
| state | 뜻 |
|---|---|
| awaiting_allocation | 대기 — 배정된 빈 노드가 없거나 아직 시작 시각 전. state_reason 에 이유 |
| starting | 노드에서 이미지를 받아 컨테이너를 띄우는 중(보통 30초~수 분 · 큰 이미지는 더) |
| running | 실행 중. ssh 모드면 ssh.command 로 접속 |
| stopping | 종료 중 |
| terminated | 끝남(배정 종료·사용자 종료·되팔기로 할당 축소) |
| failed | 컨테이너가 죽었거나 20분 안에 뜨지 않음. 로그 보고 「교체」 |
접속
ssh -p 31245 root@203.0.113.12 # 인스턴스 응답의 ssh.command
nvidia-smi
조직 설정 → SSH 공개키에 등록된 키 전부가 들어가요. 키를 추가/삭제하면 돌고 있는 인스턴스에도 바로 반영됩니다. 비밀번호 로그인은 꺼져 있어요.
custom 모드거나 SSH가 안 될 때: GET /v1/instances/{id}/logs?tail=300 · POST /v1/instances/{id}/exec {"cmd":"nvidia-smi"} (50초 이내 명령 한 번).
자동 시작(풀 템플릿)
풀마다 자동 시작 템플릿을 켜 두면, 그 풀에 노드가 배정되고 비어 있을 때(대기 인스턴스가 없을 때) 그 설정으로 인스턴스를 자동으로 만들어 띄워요. 미래 시각에 사 둔 시간이 시작될 때 손대지 않아도 뜨게 하려면 이걸 켜세요.
curl -s -X PATCH $RERENT/v1/pools/default -H "Authorization: Bearer $RERENT_TOKEN" -H 'content-type: application/json' \
-d '{"launch_template":{"enabled":true,"image":"vllm/vllm-openai:latest","mode":"custom","command":"python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-3.1-8B","ports":[8000]}}'
종료·교체
DELETE /v1/instances/{id}— 컨테이너 파기. 노드 시간은 남아 다른 인스턴스가 쓸 수 있어요.POST /v1/instances/{id}/replace— 지금 것을 종료하고 같은 설정의 새 인스턴스를 대기열에.
데이터
컨테이너 파일시스템은 인스턴스와 함께 사라져요. 산출물은 배정이 끝나기 전에 밖으로(S3·HF Hub·자기 서버) 보내세요. 되팔면 그 시간의 노드는 시작 시각에 회수되니 미리 저장하세요.
템플릿 — 설정을 이름 붙여 재사용
인스턴스 화면 아래 「인스턴스 템플릿」에서 이미지·모드·명령·시작 스크립트·환경변수·포트·우선순위·SSH 허용 대역을 묶어 이름을 붙여 두면, 인스턴스를 만들 때 「템플릿에서 채우기」로 고르고 필요한 값만 고쳐요. 배포가 인스턴스를 만들 때도 템플릿을 써요. 템플릿은 불변이라 바꾸려면 새 이름으로 만들고 배포가 가리키는 템플릿을 바꿔요(이미 돌고 있는 인스턴스는 영향 없음).
이미지 카탈로그 — 비공개 레지스트리
공개 레지스트리 이미지는 이름을 그대로 써요. GHCR·비공개 Docker Hub·ECR 처럼 로그인이 필요한 이미지는 「이미지 카탈로그」에 참조와 자격증명(사용자·토큰)을 함께 등록하고, 인스턴스·템플릿의 이미지 칸에 그 이름을 써요. 컨테이너를 띄울 때 노드 에이전트가 격리된 임시 도커 설정으로 로그인해 pull 하고, 자격증명은 API 응답에 절대 나오지 않아요. 「회수」하면 새 인스턴스에 못 쓰고 돌던 것은 그대로예요(복구 가능).
SSH 접속 허용 IP 대역(방화벽)
SSH 모드 인스턴스에 ssh_allow_cidrs(예 203.0.113.0/24, 198.51.100.7)를 주면 그 대역에서만 SSH 가 열려요 — 컨테이너 sshd 의 Match Address 규칙으로 적용돼요. 비우면 어디서나(등록한 키 있는 사람만). 노출 포트(ports)에는 적용되지 않아요(공급자 네트워크 몫). 템플릿에 넣어 두면 매번 붙어요.
배포로 유지하기
여러 인스턴스를 목표 수만큼 계속 유지하려면 「배포」 화면에서 템플릿과 목표 수를 정해요. spot 은 시간까지 사고, generic 은 산 시간 위에서 인스턴스만 맞춰요. 인스턴스가 종료되면 다음 분에 채우고, 목표를 줄이면 우선순위 낮은 것·최근 것부터 종료해요. 배포 카드의 「인스턴스」 수와 상태 메시지로 진행을 봐요.
우선순위 라벨
API 는 priority 1~4 와 함께 priority_level 을 받아요: yield(1·낮음) · normal(2·보통) · preferred(3·높음) · critical(4·최우선). 실행 중인 인스턴스의 우선순위와 태그는 카드에서 바로 바꿀 수 있어요(PATCH /v1/instances/{id}).