컴퓨트 프로필 선택
관리형 워크플로는 컴퓨트 프로필에서 실행됩니다. 컴퓨트 프로필은 HPC 스케줄러에 요청하는 리소스와 비슷하게, vCPU, 메모리, GPU의 고정된 조합입니다. 워크플로를 업로드할 때 S, M 같은 크기를 프로필에 매핑하고, 각 실행은 이러한 크기 중 하나를 선택합니다. 그러면 작업은 해당 프로필을 가진 자체 노드에서 실행되며, 작업이 끝날 때까지 그 프로필을 유지합니다.
| 프로필 | vCPU | 메모리(GB) | GPU |
|---|---|---|---|
8x32 | 8 | 32 | 없음 |
16x128 | 16 | 128 | 없음 |
48x768 | 48 | 768 | 없음 |
128x1500 | 128 | 1500 | 없음 |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
프로필 ID의 형식은 {cpu}x{memory}(메모리 단위는 GB)이며, GPU가 있는 프로필은 {cpu}x{memory}x{count}{gpu}입니다. 예를 들어 24x120x1l40s는 vCPU 24개, 메모리 120GB, NVIDIA L40S GPU 1개를 가집니다.
사용 가능한 프로필 확인
사용 가능한 프로필을 보려면 compute_profiles()를 호출하세요.
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflowClient
client = ManagedWorkflowClient()
print(client.compute_profiles())
8x32 (8 vCPU / 32 GB)
16x128 (16 vCPU / 128 GB)
48x768 (48 vCPU / 768 GB)
128x1500 (128 vCPU / 1500 GB)
24x120x1l40s (24 vCPU / 120 GB / 1l40s)
20x320x2a100 (20 vCPU / 320 GB / 2a100)
80x1200x8a100 (80 vCPU / 1200 GB / 8a100)
160x1792x8h100 (160 vCPU / 1792 GB / 8h100)
리소스로 프로필 찾기
프로필 ID를 직접 입력하는 대신 compute_profile()로 워크플로에 필요한 리소스를 설명하고, 그 결과를 sizes_map의 값으로 사용할 수 있습니다. cpu와 memory는 GB 단위로 전달하고, GPU 프로필에는 gpu를 전달하세요.
run_workflow_remotely.ipynb
profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s
sizes_map = {"S": "8x32", "L": profile}
sizes_map은 프로필 ID와 compute_profile()이 반환하는 프로필을 모두 받으며, 하나의 맵에서 둘을 섞어 사용할 수 있습니다. 업로드하기 전에 프로필 ID를 확인하려면 compute_profile()에 전달하세요. 예: client.compute_profile("16x128"). 일치하는 프로필이 없으면 오류에 사용 가능한 프로필이 나열됩니다.
compute_profiles()는 리스트를 반환하므로 직접 필터링할 수도 있습니다. 예를 들어 다음 코드는 GPU 프로필을 찾습니다.
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
워크플로의 기본 컴퓨트 프로필 설정
대부분의 워크플로는 하나의 크기로 시작합니다. 워크플로를 업로드할 때 sizes_map으로 프로필에 매핑하고, default_size로 기본값으로 지정하세요.
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient
client = ManagedWorkflowClient()
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map={"M": "16x128"},
default_size="M",
)
)
워크플로의 모든 실행이 이 프로필을 사용하므로, 실행할 때 크기를 전달할 필요가 없습니다.
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
모범 사례: 문제 크기에 맞게 크기 설정
워크플로는 특정 문제를 해결하며, 문제의 규모와 복잡도가 커지면 다른 컴퓨트 프로필이 필요할 수 있습니다. 워크플로마다 sizes_map을 두면 다음을 할 수 있습니다.
-
큰 문제가 끝까지 실행될 수 있도록 충분한 컴퓨팅 리소스를 제공합니다.
-
작은 문제가 필요 이상으로 큰 노드를 사용하지 않도록 합니다.
부분 공간 크기, 배치 수, 큐비트 수처럼 워크플로의 메모리와 CPU 사용량을 결정하는 요인을 기준으로 크기를 정할 수 있습니다.
크기 정의
작은 문제(S), 중간 문제(M), 큰 문제(L), 매우 큰 문제(XL)에 대해 최대 네 가지 크기를 매핑할 수 있습니다. 예를 들어 다음 코드는 세 가지 크기를 가진 워크플로를 정의합니다.
run_workflow_remotely.ipynb
sizes_map = {"S": "8x32", "M": "16x128", "L": "128x1500"}
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map=sizes_map,
default_size="M",
)
)
크기 규칙
크기 레이블은 S, M, L, XL 중 하나여야 하므로 워크플로는 최대 네 가지 크기를 정의할 수 있습니다. 관리형 워크플로는 대문자 또는 소문자 레이블을 모두 일치시키며 대문자로 저장합니다. 두 개의 크기가 같은 프로필에 매핑될 수 있습니다.
워크플로는 다음과 같은 경우 첫 번째 업로드를 거부합니다.
-
레이블이
S,M,L,XL이 아닙니다. -
default_size없이sizes_map을 설정했거나,sizes_map없이default_size를 설정했습니다. -
default_size가sizes_map의 레이블 중 하나가 아닙니다. -
sizes_map의 값이 사용 가능한 컴퓨트 프로필이 아닙니다.
다시 업로드할 때 크기 변경
같은 title로 워크플로를 다시 업로드하면 관리형 워크플로는 크기를 다음과 같이 처리합니다.
-
sizes_map을 설정하면 새 크기가 저장된 모든 크기를 대체합니다. -
sizes_map을 생략하면 워크플로는 저장된 크기와 기본값을 유지합니다. -
기본값만 변경하려면
sizes_map없이default_size를 설정하세요.default_size의 값은 저장된 크기 중 하나여야 합니다.
sizes_map을 설정할 때마다 default_size를 설정하세요. 다시 업로드할 때 default_size가 필수는 아닙니다. 새 크기에 이전 기본값이 포함되지 않으면 워크플로에 기본값이 없어지며, function_size 없이 실행하는 모든 실행이 실패합니다.
실행마다 크기 선택
run()에 function_size를 전달하여 해당 작업에 사용할 워크플로의 크기를 선택하세요. 생략하면 작업은 워크플로의 기본 크기를 사용합니다.
run_workflow_remotely.ipynb
print(my_workflow.sizes()) # {'S': '8x32', 'M': '16x128', 'L': '128x1500'}
print(my_workflow.get_default_size()) # 'M'
job = my_workflow.run(function_size="L", circuits=circuits) # Runs on 128x1500
job = my_workflow.run(circuits=circuits) # Runs on the default size, M
sizes()와 get_default_size()는 워크플로를 로드했을 때 저장되어 있던 크기를 반환합니다. 워크플로를 로드한 후 변경된 크기를 보려면 워크플로를 다시 로드하세요.
작업의 크기와 컴퓨트 프로필을 읽으려면 워크플로 코드에서 get_function_size()와 get_compute_profile()을 호출하세요.
source_files/my_workflow.py
from qiskit_serverless import get_compute_profile, get_function_size
print(get_function_size()) # 'L'
print(get_compute_profile()) # '128x1500'
크기 문제 해결
| 문제 | 원인 |
|---|---|
업로드가 Invalid size '...'. Valid sizes are: S, M, L, XL.과 함께 실패합니다. | sizes_map의 레이블이 지원되는 네 가지 레이블 중 하나가 아닙니다. |
업로드가 Unknown compute profile '...' for size '...'.과 함께 실패합니다. | sizes_map의 값이 사용 가능한 프로필이 아닙니다. compute_profiles()로 ID를 확인하거나 compute_profile()로 찾아보세요. |
compute_profile()이 No compute profile matches ...와 함께 실패합니다. | 정확히 그 리소스를 가진 프로필이 없습니다. GPU 프로필의 경우 gpu도 전달하세요. 오류에 나열된 목록에서 프로필을 선택하세요. |
업로드가 'default_size' is required when 'sizes' is provided.와 함께 실패합니다. | 첫 번째 업로드에서 default_size 없이 sizes_map을 설정했습니다. |
run()이 Unknown function size '...' for this function. Available sizes: ...와 함께 실패합니다. | function_size에 전달한 크기를 워크플로가 정의하지 않았습니다. |
run()이 This function has no size.와 함께 실패합니다. | 다시 업로드하면서 크기가 대체되어 기본값이 제거되었습니다. default_size와 함께 다시 업로드하거나 function_size를 전달하세요. |