작업 사용하기
작업 쿼리
작업 요약(job summary) 목록을 프로그래밍 방식으로 가져오려면 get_job_summaries() 를 사용하십시오.
import qai_hub as hub
client = hub.Client()
job_summaries = client.get_job_summaries(limit=10)
print(job_summaries)
UI에서 확인한 특정 작업 ID (jvgdwk7z5 와 같이 j 로 시작하는 ID)가 주어지면, get_job() 을 사용하여 해당 작업을 프로그래밍 방식으로 조회할 수 있습니다.
job = client.get_job("jvgdwk7z5")
print(job)
프로필 작업
프로필 작업의 결과는 다음과 같이 ProfileJob 을 사용하여 프로그래밍 방식으로 얻을 수 있습니다.
profile = job.download_profile()
print(profile)
인쇄된 사전의 출력은 다음과 같습니다.
{
'estimated_inference_time': 2997,
'estimated_inference_peak_memory': 69177344,
'first_load_time': 2162619,
'first_load_peak_memory': 83742720,
'warm_load_time': 123904,
'warm_load_peak_memory': 73179136,
'compile_time': 0,
'compile_peak_memory': 0,
'compile_memory_increase_range': None,
'compile_memory_peak_range': None,
'first_load_memory_increase_range': (0, 0),
'first_load_memory_peak_range': (26226688, 31730736),
'warm_load_memory_increase_range': (0, 10580480),
'warm_load_memory_peak_range': (12865536, 37318656),
'inference_memory_increase_range': (0, 12160),
'inference_memory_peak_range': (12288, 21276192),
'all_compile_times': [],
'all_first_load_times': [2162619],
'all_warm_load_times': [123904],
'all_inference_times': [9130, .... ]
}
메모리는 바이트로 표현되고 시간은 마이크로초로 표현됩니다. 밀리초 단위의 대기 시간을 구하려면:
latency_ms = profile["execution_summary"]["execution_time"] / 1000
모델 IO 사양
컴파일 및 연결된 모델에는 각 텐서의 이름, 모양, 데이터 형식을 설명하는 입력 및 출력 텐서 사양이 있습니다. 이는 input_spec 및 output_spec 를 통해 사용할 수 있습니다:
model = job.get_target_model()
for tensor in model.input_spec[None]:
print(f"{tensor.name}: shape={tensor.shape}, dtype={tensor.dtype}")
for tensor in model.output_spec[None]:
print(f"{tensor.name}: shape={tensor.shape}, dtype={tensor.dtype}")
input_spec 및 output_spec 속성은 그래프 이름을 TensorSpec 목록에 매핑하는 dict입니다. 단일 그래프 모델의 경우 키는 None 입니다. 다중 그래프 모델(예: 연결된 컨텍스트 바이너리)은 그래프 이름을 키로 사용합니다:
# Linked model with multiple graphs
for graph_name, tensors in model.input_spec.items():
for tensor in tensors:
print(f"[{graph_name}] {tensor.name}: shape={tensor.shape}")
양자화된 모델에는 각 텐서 사양에 scale 및 zero_point 도 포함됩니다:
for tensor in model.input_spec[None]:
if tensor.scale is not None:
print(f"{tensor.name}: scale={tensor.scale}, zero_point={tensor.zero_point}")
작업 아티팩트 다운로드
작업(Job)은 실행 중에 아티팩트를 생성합니다. 작업 유형에 따라 아티팩트에는 서버 로그, 디바이스 로그, 연산 단위(op-by-op) 타이밍 요약, 또는 QNN HTP 분석 요약(QHAS) 등이 포함될 수 있습니다. 이러한 아티팩트는 작업 실패를 트러블슈팅하거나 작업 동작을 이해하는 데 유용합니다
완료된 작업에서 어떤 아티팩트를 사용할 수 있는지 확인하려면:
artifacts = job.get_available_artifacts()
print(artifacts)
# e.g. [<JobArtifactType.HUB_LOG: 5>, <JobArtifactType.DEVICE_LOG: 1>]
특정 아티팩트 유형을 다운로드하려면:
paths = job.download_artifacts_for_type("./artifacts", hub.JobArtifactType.HUB_LOG)
사용 가능한 모든 로그(디바이스 로그 및 허브 로그)를 다운로드하려면:
paths = job.download_job_logs("./artifacts")
로그는 download_results 를 호출할 때 자동으로 포함되기도 합니다.
results = job.download_results("./results")
# results directory will contain the job's primary output (e.g. compiled model)
# as well as any available log files
사용 가능한 아티팩트 유형은 JobArtifactType 에 나열되어 있습니다. 모든 아티팩트 유형이 모든 작업에서 제공되는 것은 아니므로, 특정 작업에서 어떤 아티팩트가 사용 가능한지는 get_available_artifacts() 를 사용하여 확인해야 합니다.
참고
작업 아티팩트의 형식, 내용 및 제공 여부는 사전 공지 없이 변경될 수 있으며, 이는 안정적인 API 계약의 일부가 아닙니다.