VastAI 인스턴스 관리 API 가이드
이 문서는 VastAI 인스턴스를 검색, 생성, 관리하는 API 사용법을 설명합니다.
주요 기능
1. 인스턴스 검색 (오퍼 검색)
- 기본 검색:
GET /api/vast/offers
- 고급 검색:
POST /api/vast/search-offers
2. 템플릿 기반 인스턴스 생성
- 템플릿 목록:
GET /api/vast/templates
- 템플릿 상세:
GET /api/vast/templates/{template_name}
- 템플릿 기반 생성:
POST /api/vast/instances/from-template
3. 인스턴스 DB 저장 및 관리
- 자동 DB 저장: 인스턴스 생성 시 자동으로 DB에 저장
- 상태 업데이트: 인스턴스 상태 변경 시 자동 업데이트
4. 인스턴스 상태 조회
- 기본 상태:
GET /api/vast/instances/{instance_id}
- 상세 상태:
GET /api/vast/instances/{instance_id}/enhanced
- 비용 분석:
GET /api/vast/instances/{instance_id}/cost-analysis
API 엔드포인트 상세
1. 인스턴스 검색
기본 오퍼 검색
GET /api/vast/offers?gpu_name=RTX4090&max_price=1.5&rentable=true
고급 오퍼 검색
POST /api/vast/search-offers
Content-Type: application/json
{
"gpu_name": "RTX4090",
"max_price": 2.0,
"min_gpu_ram": 16,
"num_gpus": 1,
"rentable": true,
"sort_by": "price",
"limit": 10
}
응답 예시:
{
"offers": [
{
"id": "12345",
"gpu_name": "RTX 4090",
"num_gpus": 1,
"gpu_ram": 24,
"dph_total": 1.2,
"rentable": true
}
],
"total": 50,
"filtered_count": 10,
"sort_info": {
"sort_by": "price",
"order": "ascending"
}
}
2. 템플릿 관리
사용 가능한 템플릿 목록 조회
GET /api/vast/templates
응답:
{
"templates": [
{
"name": "high_performance",
"config": {
"vllm_model_name": "Qwen/Qwen2.5-Coder-32B-Instruct",
"vllm_max_model_len": 8192,
"min_gpu_ram": 24,
"max_price": 2.0
}
},
{
"name": "budget",
"config": {
"vllm_model_name": "Qwen/Qwen2.5-Coder-7B-Instruct",
"min_gpu_ram": 8,
"max_price": 0.5
}
}
]
}
특정 템플릿 상세 정보
GET /api/vast/templates/high_performance
3. 인스턴스 생성
템플릿 기반 인스턴스 생성
POST /api/vast/instances/from-template?template_name=high_performance&offer_id=12345
Content-Type: application/json
{
"custom_config": {
"vllm_max_model_len": 4096
}
}
일반 인스턴스 생성 (템플릿 지원)
POST /api/vast/instances
Content-Type: application/json
{
"offer_id": "12345",
"template_name": "budget",
"custom_config": {
"auto_destroy": true
}
}
응답:
{
"success": true,
"instance_id": "inst_67890",
"template_name": "high_performance",
"message": "템플릿 'high_performance'을 사용하여 인스턴스가 생성되었습니다.",
"status": "creating"
}
4. 인스턴스 상태 조회
기본 상태 조회
GET /api/vast/instances/inst_67890
상세 상태 조회 (DB 정보 포함)
GET /api/vast/instances/inst_67890/enhanced
응답:
{
"success": true,
"data": {
"instance_id": "inst_67890",
"basic_status": {
"status": "running",
"public_ip": "192.168.1.100"
},
"vllm_status": {
"running": true,
"port": 8000
},
"db_info": {
"status": "running_vllm",
"cost_per_hour": 1.2,
"gpu_info": {
"gpu_name": "RTX 4090",
"num_gpus": 1,
"gpu_ram": 24
},
"uptime": "2:30:45"
}
}
}
비용 분석
GET /api/vast/instances/inst_67890/cost-analysis
응답:
{
"instance_id": "inst_67890",
"cost_per_hour": 1.2,
"total_cost": 3.0,
"uptime_hours": 2.5,
"cost_breakdown": {
"hourly_rate": 1.2,
"uptime_days": 0.1,
"estimated_daily_cost": 28.8,
"estimated_monthly_cost": 864.0
}
}
5. 인스턴스 목록 및 통계
향상된 인스턴스 목록 조회
GET /api/vast/instances?status_filter=running&sort_by=created_at
전체 통계
GET /api/vast/statistics
응답:
{
"total_instances": 15,
"active_instances": 8,
"destroyed_instances": 7,
"total_cost": 245.67,
"average_cost_per_hour": 1.35,
"gpu_distribution": {
"RTX 4090": 5,
"RTX 3090": 3
},
"status_distribution": {
"running": 6,
"creating": 2,
"exited": 7
}
}
사용 가능한 템플릿
1. high_performance
- 목적: 고성능 작업, 대용량 모델
- GPU: RTX4090, A100 (24GB+ RAM)
- 모델: Qwen2.5-Coder-32B-Instruct
- 최대 가격: $2.0/hour
2. budget
- 목적: 개발, 테스트, 소규모 작업
- GPU: RTX3080, RTX3090, GTX1080Ti (8GB+ RAM)
- 모델: Qwen2.5-Coder-7B-Instruct
- 최대 가격: $0.5/hour
3. research
- 목적: 연구, 실험
- GPU: RTX4070, RTX4080, RTX3090 (16GB+ RAM)
- 모델: Qwen2.5-Coder-14B-Instruct
- 최대 가격: $1.0/hour
사용 예시
1. 예산형 인스턴스 빠른 생성
# 1. 템플릿 확인
curl -X GET "http://localhost:8001/api/vast/templates/budget"
# 2. 적합한 오퍼 검색
curl -X POST "http://localhost:8001/api/vast/search-offers" \
-H "Content-Type: application/json" \
-d '{"max_price": 0.5, "min_gpu_ram": 8, "limit": 5}'
# 3. 템플릿으로 인스턴스 생성
curl -X POST "http://localhost:8001/api/vast/instances/from-template?template_name=budget"
2. 커스텀 설정으로 고성능 인스턴스 생성
curl -X POST "http://localhost:8001/api/vast/instances" \
-H "Content-Type: application/json" \
-d '{
"template_name": "high_performance",
"custom_config": {
"vllm_max_model_len": 16384,
"vllm_gpu_memory_utilization": 0.9
}
}'
3. 인스턴스 모니터링
# 상세 상태 확인
curl -X GET "http://localhost:8001/api/vast/instances/inst_12345/enhanced"
# 비용 분석
curl -X GET "http://localhost:8001/api/vast/instances/inst_12345/cost-analysis"
# 전체 통계
curl -X GET "http://localhost:8001/api/vast/statistics"
데이터베이스 저장 정보
인스턴스 생성 시 다음 정보가 자동으로 DB에 저장됩니다:
- 기본 정보: instance_id, offer_id, image_name, status
- GPU 정보: gpu_name, num_gpus, gpu_ram (JSON)
- 비용 정보: cost_per_hour
- 네트워크 정보: public_ip, ssh_port, port_mappings (JSON)
- 템플릿 정보: template_name (사용된 템플릿)
- 시간 정보: created_at, updated_at, destroyed_at
- 설정 정보: start_command, auto_destroy
로그 시스템
모든 인스턴스 작업은 VastExecutionLog 테이블에 기록됩니다:
- 작업 정보: operation, command, result
- 성능 정보: execution_time, success
- 메타데이터: template_name, gpu_info, cost_per_hour 등 (JSON)
에러 처리
API는 다음과 같은 HTTP 상태 코드를 반환합니다:
- 200: 성공
- 400: 잘못된 요청 (템플릿 없음, 파라미터 오류 등)
- 404: 리소스 없음 (인스턴스 없음, 템플릿 없음 등)
- 500: 서버 오류
에러 응답 예시:
{
"detail": "템플릿 'invalid_template'을 찾을 수 없습니다"
}