비용 비교: 선불 vs. 주문형

그래프
Rescale은 다양한 기능을 제공합니다. 가격 옵션 HPC 시뮬레이션 실행: 주문형, 낮은 우선순위 및 선불. 이 문서에서는 비용 관점에서 선불 요금제를 선택하는 것이 적합한지 판단하기 위한 컴퓨팅 사용량 분석을 보여줍니다.
당사의 선불 가격 플랜은 예약에 대한 모든 시간을 선불로 지불하는 대가로 시간당 최저 비용으로 Rescale 코어에 대한 장기 예약을 제공합니다. 선불 코어는 활용도가 충분히 높은 경우 하드웨어 비용을 낮추는 좋은 방법입니다. 다음에서는 2가지 질문에 답하겠습니다.

  • 선불 결제를 통해 비용을 절감하려면 특정 코어 유형의 활용도가 얼마나 높아야 합니까?
  • 코어 사용 일정을 고려할 때 총 하드웨어 비용을 최소화하려면 선불 코어를 몇 개 구입해야 합니까?

활용도에 따른 선불비용 절감
첫 번째 질문은 다음 방정식을 풀어 계산됩니다.
비용 절감 = 활용도 * 총 예약 시간 * 주문형 가격 - 총 예약 시간 * 선불 가격
선불 가격 옵션은 두 가지 기간 중에서 선택할 수 있습니다. 사용자는 1년 또는 3년 동안 코어를 선불로 지불할 수 있습니다. 따라서 인기 있는 니켈 코어 유형(3년 선불 비용 $0.04/코어/시간)의 경우 비용 절감 = 0인 손익분기점은 다음과 같습니다.
활용도 = 시간당 $0.04 선불 / 시간당 $0.15 온디맨드 =~ 27%
니켈 코어의 평균 활용도가 다음보다 높은 경우 27%, 선불은 주문형 요금에 비해 비용을 절약해줍니다. 50년 동안의 평균 활용률이 XNUMX%라면 비용이 절감됩니다. 코어당 연간 $482 On Demand 대신 XNUMX년 동안 선불 옵션을 사용합니다.
특정 직업 예측에 대해 얼마를 선불로 지불합니까?
위의 계산은 간단하지만 목표 활용도를 염두에 두지 않을 수도 있습니다. 대신, 종종 과거 사용량을 기반으로 실행하려는 모든 컴퓨팅 작업을 예측할 수 있습니다. 작업 일정을 어떻게 잡고 구매할 최적의 선불 코어 수를 결정합니까?
이전과 마찬가지로 비슷한 것을 계산합니다.
선불 절감액(x 코어 선불) = 모든 온디맨드 비용 – (선불 비용(x) + 잔여 온디맨드 비용(x))
모든 주문형 비용 선불 기간 동안 모든 작업에 대한 총 코어 시간에 온디맨드 코어 가격을 곱한 값입니다.
선불비용 x 코어에 대한 선불 비용입니다.
잔여 온디맨드 비용 계산하기 까다로운 것입니다. 선불 코어의 활용도를 극대화하는 동시에 필요한 추가 온디맨드 코어 시간을 확보해야 합니다.
잔여 코어 시간을 계산하려면 단위 시간당 실행되는 코어 수를 살펴본 다음 선불이 아닌 코어만 고려하면 됩니다. 시각적으로 우리는 코어 사용 시간 간격을 아래에서 위로 포장하고 시간에 맞춰 작업 전반에 걸쳐 하단 x 코어를 분할한 다음(선불 코어 사용) 나머지 비용을 계산합니다.
코어_자르지 않음
위 그림은 핵심 시간 간격이 항상 완전히 겹치거나 분리되지는 않는다는 점을 고려하지 않았습니다. 간격은 실제로 더 작은 분리된 간격으로 분할되어야 하며 그런 다음 이러한 간격 부분으로 바닥부터 채워야 합니다.
코어_컷
다음으로 각 시간 조각에 대한 코어 수를 세어 누락된 조각에는 암시적으로 코어가 XNUMX개 있습니다.
코어_집계
여기에서는 예약 기간을 서로 다른 간격으로 완전히 다루었습니다. 다음으로 선불 개수를 뺄 수 있습니다. 예를 들어 선불 코어가 2개 있는 경우 잔여 코어 간격을 얻습니다.
cores_aggregate_prepaid
그런 다음 이러한 간격에서 간격 길이와 코어 수의 곱을 합산하여 잔여 코어 시간을 얻습니다.
동일한 분석을 프로그래밍 방식으로 수행하는 방법을 살펴보겠습니다. 우리의 입력은 다음과 같습니다:

  • 부분적으로 겹치는(start_time, end_time, core_count) 튜플 목록인 컴퓨팅 작업 일정
  • 선불예약 기간 시작
  • 선불예약기간 종료
  • 선불 코어 수
defcalculate_residual_core_hours(core_use_intervals,reservation_start,reservation_end,prepaid_core_count): # start_time에 대한 정렬 sorted_intervals = sorted(core_use_intervals, key=itemgetter(0)) disjoint_intervals =chop_and_aggregate(reservation_start,reservation_end,sorted_intervals)residual_core_intervals = ( (start_time, end_time, max (0 , (개수 - prepaid_core_count))) start_time, end_time, disjoint_intervals의 개수) return sum((end_time - start_time) * start_time, end_time의 개수, 잔여_core_intervals의 개수)

여기서 복잡성의 대부분은 chuck_and_aggregate에 숨어 있습니다. 이에 대한 구현을 살펴보겠습니다. booking_start에서 시작하여 현재 열려 있는 간격을 추적하면서 시간에 맞춰 앞으로 나아갑니다. 간격이 열리거나 닫히면 마지막 2개 시간 경계 사이의 현재 코어 수를 사용하여 새로운 분리된 간격을 만듭니다.

def chuck_and_aggregate(reservation_start,reservation_end, sorted_intervals): current_time =reservation_start open_intervals = Counter()closed_intervals = [] for start, end, count in sorted_intervals: # 다음 간격 시작 전에 종료되는 간격 닫기 if open_intervals: next_end = min(open_intervals.keys ()) while start >= next_end: Closed_intervals.append((current_time, next_end, sum(open_intervals.values()))) del open_intervals[next_end] current_time = next_end if open_intervals: next_end = min(open_intervals.keys()) else : break # 새 간격 시작 시간에 열린 간격을 분할합니다. if open_intervals:closed_intervals.append((current_time, start, sum(open_intervals.values()))) # 새 간격 추가 current_time = start open_intervals[end] += count # 종료 end in sorted(open_intervals.keys()): end = min(end,reservation_end) if open_intervals:closed_intervals.append((current_time, end, sum(open_intervals.values()))) del open_intervals[end]에 대한 남은 열린 간격 폐쇄_간격 반환

이 모든 것을 종합하면 남은 코어 시간에 온디맨드 가격을 곱하여 비용을 절감할 수 있습니다. 선불 코어가 없는 계산_residual_core_hours를 사용하여 (비효율적으로) 전체 주문형 비용을 얻을 수도 있습니다.

all_on_demand_hours =calculate_residual_core_hours(job_intervals,reservation_start,reservation_end,0)residual_on_demand_hours=calculate_residual_core_hours(job_intervals,reservation_start,reservation_end, prepaid_cores)절감 = (all_on_demand_hours * on_demand_price) - (prepaid_cores * prepaid_price + 잔여_on_demand_hours * on_demand _가격)

여기에서 prepaid_cores 수에 대해 이진 검색을 수행하여 최적의 절감 효과를 찾을 수 있습니다. 최적화를 위해 disjoint_intervals는 모든 다른 선불 코어 계산에 대해 한 번만 계산하면 됩니다.
추가 세부 정보
위의 설명은 실제 선불 옵션에서 단순화되었습니다.
다양한 코어 유형
일반적으로 실행하는 작업 전반에 걸쳐 여러 핵심 유형(예: Marble & Nickel)을 사용할 수 있습니다. 이 경우 작업을 코어 유형별로 구분하고 각 코어 유형 배치에 대해 위의 분석을 한 번씩 수행합니다. 각 유형별로 최적의 선불 코어 수가 생성됩니다. 어떤 상황에서는 이로 인해 용량이 낭비될 수 있으며 특정 작업에 필요한 것보다 더 강력한 코어에서 실행하는 경우에도 더 적은 수의 코어 유형에서 실행하는 것보다 비용이 더 많이 들 수 있습니다..
우리는 귀하의 이전 Rescale 사용량을 기반으로 위의 분석을 수행하여 추천을 제공하는 선불 코어 계산기를 곧 출시할 계획입니다!

저자

  • 마크 휘트니

    Mark Whitney는 Rescale의 엔지니어링 이사입니다. 그의 전문 분야에는 고성능 컴퓨팅 아키텍처, 양자 정보 연구, 클라우드 컴퓨팅이 포함됩니다. 그는 캘리포니아 대학교 버클리 캠퍼스에서 컴퓨터 과학 박사 학위를 취득했습니다.

비슷한 게시물