Code Repositories의 연산 사용량
Code Repositories에서 데이터셋을 빌드하면 Foundry가 변환 로직을 연산 환경으로 가져와 실행합니다. 처리량과 실행 시간은 입력 및 출력 크기, 코드의 연산과 자원 프로필에 따라 달라집니다. 코드 텍스트를 편집하는 행위와 실제 데이터를 읽어 계산하는 작업은 구분합니다.
측정 구간과 귀속 리소스
연산 사용량은 입력 읽기, 코드 실행, I/O 대기와 출력 쓰기를 포함한 실행 기간에 발생합니다. 병렬 실행에서는 실제 경과 시간 1초에 여러 compute-seconds를 사용할 수 있습니다. 출력 파일은 별도로 저장 공간을 사용합니다.
Resource Management에서 사용량을 조사하거나 데이터셋 Details의 Resource usage metrics에서 시간별 사용량을 볼 수 있습니다. 변환 작업의 사용량은 그 작업이 구체화한 데이터셋에 귀속됩니다.
출력이 여러 개이면 각 데이터셋에 균등하게 배분합니다. 한 출력이 5행이고 다른 출력이 500만 행이어도 같은 작업이 만든 두 출력에는 연산 사용량이 절반씩 귀속됩니다. 출력 행 수의 비율로 배분하는 방식이 아닙니다.
기본 사용량 계수
| 자원 | 기본 계수 |
|---|---|
| vCPU | 1 |
| T4 GPU | 1.2 |
| V100 GPU | 3 |
| A100 GPU | 1.3 |
| A10G GPU | 1.5 |
| L4 GPU | 2.1 |
| H100 GPU | 4.7 |
| H200 GPU | 4.7 |
기업 계약의 계수는 다를 수 있으므로 실제 비용 계산 전에 적용되는 조건을 Palantir 담당자와 확인합니다. 이 값들은 통화 단가가 아니라 compute-seconds 산정 계수입니다.
입력 규모와 로직
다른 조건이 같다면 같은 열 처리를 100GB 데이터에 적용하는 작업은 10GB에 적용하는 작업보다 더 많은 데이터를 처리합니다. 집계, 조인과 머신러닝 연산처럼 코드가 수행하는 작업도 사용량에 영향을 줍니다.
연산 수의 단순한 예로 5 × 5는 곱셈 한 번이고 5! = 5 × 4 × 3 × 2 × 1을 순서대로 계산하면 곱셈 네 번입니다. 이런 연산 수 비교를 실제 실행 시간이 정확히 네 배라는 뜻으로 사용하지는 않습니다.
작업은 취소하지 않는 한 필요한 입력 전체에 로직을 적용하고 출력을 쓰는 단계까지 진행합니다. 같은 결과를 내는 코드도 연산 횟수와 데이터 이동량에 따라 사용량이 크게 달라질 수 있습니다.
자원 구성과 최적화
실행기 수와 실행기별 vCPU 및 메모리는 작업별로 구성할 수 있습니다. 설정을 재정의하지 않으면 기본 Spark 프로필을 사용합니다. 자원을 늘리면 경과 시간당 사용량이 늘지만 실행 시간도 바뀔 수 있으므로 최종 사용량을 함께 비교합니다.
Spark details에서 동시성, shuffle과 메모리를 확인하고 다음 방법을 검토합니다.
- 처리 행 수, 열 수와 자료형, 내용에 맞춰 파티션을 정합니다. 데이터 크기 약 128MB당 파티션 하나는 일반적인 시작 기준이며 고정 규칙은 아닙니다.
- 증분 계산으로 이미 처리한 데이터를 다시 계산하는 일을 줄입니다.
- 소규모 및 중간 규모 입력에서는 Spark 외의 단일 노드 엔진이 시작 부담을 줄이고 효율적일 수 있습니다. 사용 연산과 결과의 차이를 함께 확인합니다.
- 스케줄 구성에서 중복 실행과 불필요한 강제 빌드를 줄입니다.
CPU와 메모리의 산식
기본 메모리 대 코어 비율은 7.5GiB입니다. 정적으로 할당한 자원을 D초 사용하는 경우의 산식은 다음과 같습니다.
driver_compute_seconds
= max(driver_vCPU, driver_GiB_RAM / 7.5) * D
executor_compute_seconds
= executor_count * max(executor_vCPU, executor_GiB_RAM / 7.5) * D
total_compute_seconds
= driver_compute_seconds + executor_compute_seconds
예제 1: 일반 메모리
드라이버는 1 vCPU와 6GiB, 실행기는 각각 1 vCPU와 6GiB이며 네 개를 사용합니다. 전체 자원을 120초 동안 할당한 가상 작업입니다.
| 구간 | 계산 | 사용량 |
|---|---|---|
| 드라이버 | max(1, 6/7.5) × 120 | 120 |
| 실행기 | 4 × max(1, 6/7.5) × 120 | 480 |
| 합계 | 120 + 480 | 600 compute-seconds |
예제 2: 큰 실행기 메모리
드라이버는 2 vCPU와 6GiB, 실행기는 각각 1 vCPU와 15GiB이며 네 개를 사용합니다. 실행 시간은 120초입니다.
| 구간 | 계산 | 사용량 |
|---|---|---|
| 드라이버 | max(2, 6/7.5) × 120 | 240 |
| 실행기 | 4 × max(1, 15/7.5) × 120 | 960 |
| 합계 | 240 + 960 | 1,200 compute-seconds |
실행기당 메모리가 15GiB이므로 코어 수 1 대신 메모리 비중 2가 산식에 적용됩니다.
예제 3: 실행기 수가 달라지는 작업
드라이버는 2 vCPU와 6GiB를 120초 사용합니다. 각 실행기는 1 vCPU와 6GiB이며 처음 60초에는 두 개, 나머지 60초에는 네 개를 사용합니다.
| 구간 | 계산 | 사용량 |
|---|---|---|
| 드라이버 전체 | max(2, 6/7.5) × 120 | 240 |
| 실행기 두 개 구간 | 2 × max(1, 6/7.5) × 60 | 120 |
| 실행기 네 개 구간 | 4 × max(1, 6/7.5) × 60 | 240 |
| 합계 | 240 + 120 + 240 | 600 compute-seconds |
동적 할당은 최대 실행기 수를 전체 경과 시간에 곱하지 않고 실제 할당 구간별로 계산합니다.
예제 4: T4 GPU 연산
GPU 사용량 예제에서는 드라이버에 T4 하나, 실행기 네 개에 각각 T4 하나를 120초 사용하는 것으로 계산합니다. T4 계수는 1.2입니다.
| 구간 | 계산 | GPU 연산 사용량 |
|---|---|---|
| 드라이버 | 1 × 1.2 × 120 | 144 |
| 실행기 | 4 × 1 × 1.2 × 120 | 576 |
| 합계 | 144 + 576 | 720 compute-seconds |
이 표는 지정한 GPU 자원의 사용량 계산입니다. 실제 작업의 자원 구성과 적용 계수는 해당 프로필 및 계약 기준으로 확인합니다.