Skip to content

OSSS-KU/gpu-provisioner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

146 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

이기종 GPU 환경에서 분산 학습 자동공급 및 스케줄링 기술 연구

설치 방법

# git clone https://github.com/OSSS-KU/ecoGPU
# cd ecoGPU
# docker build -t ecogpu:latest .
# docker run --ipc=host --ulimit memlock=-1 --ulimit stack=67108864  -v .:/workspace --gpus all -d --name api-server -p 8000:8000 ecogpu:latest

structure

structure

configuration

EcoGPU API는 두 개의 JSON 입력 파일을 받아 학습 시간·비용·GPU 사용량을 예측합니다. 첫째는 클러스터 관리자가 입력하는 cluster.json이고, 둘째는 사용자가 요청과 함께 body에 담아 보내는 worklaod.json입니다.

클러스터 관리자 입력: cluster.json

GPU 클러스터 관련 정보를 포함합니다.

필드 의미 입력 예시 주의사항
gpu_counts : "GPU-이름-메모리"
: 해당 GPU 총 개수
"A100-40GB": 4, "H100-80GB": 8 여러 종류 동시 기재 가능. /opt 엔드포인트는 첫 번째 키를 기본 사용
bandwidth_gb_per_s 노드 간 평균 통신 대역폭 (GB/s). DP/TP Ring All-Reduce에 사용 478.116 단일 값으로 간주하므로 다중 노드·비대칭 망은 아직 지원하지 않음
GPU 이름 규칙 …-<n>GB 형식이어야 메모리 예측기가 용량을 파싱 가능 H100-80GB, A100-40GB 정규식 (\d+)GB 로 숫자를 추출하므로 뒤에 반드시 GB가 붙어야 함

사용자 입력: workload.json

예측할 워크로드 관련 정보를 포함합니다.

필드 의미 제약/권장값
model_name 모델 이름. 소문자 권장 (llama, vits 등)
data_parallel_size Data Parallel size
tensor_parallel_size Tensor Parallel size
pipeline_parallel_size Pipeline Parallel size
vocab_size vocab 크기 (v) 양의 정수
attention_heads 전체 어텐션 헤드 수 (a) 양의 정수
key-value_heads KV 헤드 수(GQA용) (k) k <= attention_heads
total_num_parameters 전체 파라미터 개수 양의 정수
num_transformer_layers 레이어 수 (L) 양의 정수
hidden_size hidden 차원 (h) 양의 정수
sequence_length 시퀀스 길이 (s) 양의 정수
batch_size 글로벌 배치 크기 (B) B % microbatch_size == 0
microbatch_size 마이크로배치 크기 (b) 1·2·4·8 (새값은 ops_db에 반영 필요)
FFN_hidden_size FFN hidden 크기 (h_{ffn}) 양의 정수

Note (dp * tp * pp)는 구동할 총 GPU 수 라는 점에 유의해야 합니다.

benchmarks & models

benchmarks

이 프로젝트는 딥러닝 모델을 구성하는 다양한 연산자(Operator)에 대해 PyTorch 기반 벤치마크를 수행하여, 연산별 실행 시간을 측정합니다.
측정 결과는 GPU별로 ops_db/perf_{GPUNAME}.csv 파일에 저장되며, 학습 시간 예측에 활용됩니다.

벤치마크 실행 방법

  1. 벤치마크 스크립트 실행

    python ops_db/op_benchmark.py
    • 실행 시 현재 사용 가능한 GPU의 이름을 자동으로 감지하여, 결과를 ops_db/perf_{GPUNAME}.csv로 저장합니다.
    • 예시: ops_db/perf_nvidia_a100-sxm4-40gb.csv
  2. 벤치마크 대상 및 설정

    • 주요 PyTorch 연산자(ONNX 연산자와 매핑)별로 벤치마크를 수행합니다.
    • 다음과 같은 다양한 조합에 대해 반복 측정합니다:
      • Batch size: 1, 2, 4, 8, 16
      • Sequence length: 512, 1024, 2048
      • Precision: fp32, fp16, mixed
    • 각 조합별로 연산자의 Forward/Backward 평균 실행 시간을 측정합니다.
  3. 결과 파일 구조

    • 결과는 CSV 파일로 저장되며, 주요 컬럼은 다음과 같습니다:

      Opname precision bs seq_len hidden FWD_time BWD_time TOT_time
      Add fp32 1 512 4096 0.123 0.456 0.579
      ... ... ... ... ... ... ... ...
    • 각 행은 하나의 연산자, 하나의 설정(batch size, seq_len, precision 등)에 대한 측정 결과를 나타냅니다.

    • TOT_time은 Forward와 Backward의 합산(ms)입니다. Backward가 없는 연산자는 0으로 기록됩니다.

  4. 예측에서의 활용

    • 학습 시간 예측기는 현재 구동 중인 GPU의 이름에 맞는 CSV 파일을 자동으로 선택하여,
      입력된 batch size에 맞는 연산자별 실행 시간을 집계합니다.
    • 새로운 batch size나 연산자 조합을 추가하려면, 반드시 벤치마크를 다시 실행하여 CSV를 갱신해야 합니다.

models

이 프로젝트를 구동하려면 모델 연산자 그래프가 필요합니다. 현재 구현은 ONNX(Open Neural Network Exchange) 형식의 모델을 사용합니다.
ONNX 모델 파일(예: llama.onnx, vits.onnx)은 프로젝트의 models/ 디렉토리 내에 위치시켜야 합니다.
VITS, LLaMA 3.1-8B, LLaVA ONNX 모델은 다음 링크에서 다운로드할 수 있습니다:

임의 파이토치 모델을 ONNX 모델 파일 형식으로 Export하는 것도 가능합니다(다음 링크 참고).

APIs: usage

엔드포인트 HTTP 메서드 설명 요청 본문 응답 (JSON)
/status GET 예측 가능 여부 확인​ 없음 요청 성공:
{"status": "ok"}

요청 실패:
{"error": "오류 메시지"}
/predict POST 학습 시간 예측​ workload.json 요청 성공:
{"training_time_per_iteration":123.456,"total_training_time":1234.56,"iteration_count":10,"cost":12345.6

요청 실패:
{"error": "오류 메시지"}
/opt POST 최적의 ​GPU 기종/개수/가격 예측​ workload.json 요청 성공:
{"gpu": "H100-80GB", "dp": 2, "tp": 1, "pp": 2, "training_time": 780.87, "cost": 584.04}

best_result_{GPUNAME}.json 결과 파일 생성

요청 실패:
{"error": "오류 메시지"}
/lowest POST OOM 미발생 구성 중 가장 짧은 시간이 소요되는 구성 예측 workload.json 요청 성공:
{"lowest_value": 50.0, "corresponding_config": {"dp": 2, "tp": 4, "pp": 1}}

upper_bound.json 결과 파일 생성

요청 실패:
{"error": "오류 메시지"}
/highest POST 가용 GPU 자원 중 가장 오랜 시간이 소요되는 구성 예측 workload.json 요청 성공:
{"highest_value": 200.0, "corresponding_config": {"dp": 1, "tp": 1, "pp": 8}}

lower_bound.json 결과 파일 생성

요청 실패:
{"error": "오류 메시지"}
/stop POST 실행 중인 예측/최적화 job 강제 종료 없음 요청 성공:
{"status": "stopped"}
실행 중 job 없음:
{"status": "no running job"}

사용 예시

# curl -i -X GET http://localhost:8000/status
# curl -i -X POST http://localhost:8000/predict  -H "Content-Type: application/json" -d "@./configs/workload.json"
# curl -i -X POST http://localhost:8000/opt  -H "Content-Type: application/json" -d "@./configs/workload.json"
# curl -i -X POST http://localhost:8000/lowest  -H "Content-Type: application/json" -d "@./configs/workload.json"
# curl -i -X POST http://localhost:8000/highest -H "Content-Type: application/json" -d "@./configs/workload.json"
# curl -i -X POST http://localhost:8000/stop

Testing

해당 문서 참고

Authorship & Contributions

https://github.com/OSSS-KU/ecoGPU/graphs/contributors

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •