runpod/runpodctl
interact with Runpod via the cli
runpodctl의 기능
runpodctl은 RunPod의 명령줄 클라이언트로, GPU 기반 컨테이너(pods라고 함)와 서버리스 추론 엔드포인트를 생성하고 관리할 수 있습니다. 이 도구를 사용하면 터미널에서 리소스 생성, 시작, 정지, 삭제, 검사, 서버리스 함수 호출, 파일 전송을 모두 수행할 수 있습니다.
사용 대상
- 훈련이나 실험을 위해 즉시 GPU 머신이 필요한 AI 연구자 / 개발자
- 서버리스 엔드포인트로 추론 모델을 배포하고 빠르게 테스트하거나 모니터링하고 싶은 ML 엔지니어
- HTTP 호출을 직접 작성하지 않고도 컴퓨팅 자원을 프로그래밍 방식으로 프로비저닝이 필요한 자동화 스크립트 또는 AI 에이전트
핵심 기능
| 영역 | 명령어 (명사-동사 형식) | 수행 가능한 작업 |
|---|---|---|
| Pod 관리 | runpodctl pod list/get/create/update/start/stop/delete |
기존 GPU 포드 목록 조회, 포드 정보 확인, Docker 이미지에서 새 포드 생성, 구성 변경, 라이프사이클 제어 |
| 서버리스 엔드포인트 | runpodctl serverless list/get/create/update/delete/run/status/health |
"서버리스" 추론 서비스 관리, JSON 페이로드로 실행, 작업 상태 확인, 워커 상태 점검 |
| 준비 완료 대기 | --wait (pod create 또는 serverless create에서 사용) |
포드의 SSH 접속 가능 또는 서버리스 워커가 ready/running 상태가 될 때까지 블로킹. 수동 폴링 루프를 피할 수 있음 |
| 파일 전송 | runpodctl send <file> / runpodctl receive <code> |
API 키 없이 피어 투 피어 도구 croc를 사용해 마シン 간 파일 전송 |
| 출력 형식 | `--output=json | yaml |
| 에러 처리 | stderr에 일관된 JSON 에러 객체와 안정적인 code 필드 포함 |
스크립트는 자유형 메시지를 파싱하는 대신 에러 코드(not_found, usage_error, wait_timeout 등)를 기반으로 분기 가능 |
일반적인 워크플로우 (빠른 시작)
# 1️⃣ RunPod API 키 한 번 저장
runpodctl config --apiKey=YOUR_KEY
# 2️⃣ 현재 포드 목록 보기
runpodctl pod list
# 3️⃣ 새 GPU 포드 생성 (예: A100에 PyTorch 이미지)
runpodctl pod create \
--image=runpod/pytorch:2.8.0-py3.11-cuda12.8.1-cudnn-devel-ubuntu22.04 \
--gpu-id=NVIDIA_A100
# 4️⃣ 사용 후 정지 및 삭제
runpodctl pod stop <pod_id>
runpodctl pod delete <pod_id>
서버리스 엔드포인트에도 동일한 패턴이 적용 가능. 예: runpodctl serverless run <id> --input '{"prompt":"hello"}'
설치 옵션
| 플랫폼 | 명령어 |
|---|---|
| Linux/macOS (WSL 포함) | wget -qO- cli.runpod.net | sudo bash |
| macOS (Homebrew) | brew install runpod/runpodctl/runpodctl |
| Windows PowerShell | wget https://github.com/runpod/runpodctl/releases/latest/download/runpodctl-windows-amd64.exe -O runpodctl.exe |
| Conda / Mamba / Pixi | conda install -c conda-forge runpodctl (또는 mamba, pixi global install) |
개발자에게 중요한 설계 사항
- JSON 우선 출력: 성공한 모든 명령어는 stdout에 단일 JSON 객체를 출력합니다. 이는 다른 프로그램이나 LLM 기반 에이전트에서 쉽게 사용할 수 있도록 합니다.
- stdout / stderr 분리: 데이터(포드 정보, 작업 페이로드)는 stdout으로, 진행 메시지와 에러 객체는 stderr로 전송됩니다. 스트림 혼합을 방지합니다.
- 안정적인 에러 코드: 모든 에러에는 소문자
code필드(예:not_found,rate_limited)가 포함됩니다. 스크립트는 HTTP 상태나 자유형 텍스트가 아닌 이 필드를 기반으로 분기해야 합니다. - 대기 세미틱스:
--wait는 리소스가 사용 가능해질 때까지 블로킹합니다(포드는 SSH 접속 가능, 서버리스는 적어도 하나의 워커가 준비됨). 타임아웃은 설정 가능(--wait-timeout). 대기를 중단해도 리소스는 삭제되지 않으며, CLI는 리소스 ID를 반환하여 나중에 정리할 수 있습니다. - 숨겨진 동기식 엔드포인트 없음: CLI는 항상 비동기식
/runAPI를 사용하고/status를 폴링합니다./runsync엔드포인트의 단점(청구 오류, 결과 보존 기간 짧음)을 피합니다.
사용하지 않아도 되는 경우
RunPod을 웹 UI 또는 고수준 SDK만 사용하는 경우 runpodctl 설치는 거의 가치가 없습니다. CI 파이프라인, 원격 셸, 또는 자율형 AI 에이전트의 일부로 가볍고 스크립트 가능한 인터페이스가 필요한 경우에만 이 도구의 진가가 발휘됩니다.
위 모든 내용은 프로젝트의 README에서 직접 인용되었으며, 추가 기능은 추측되지 않았습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트