ジョブの操作
ジョブの問い合わせ
ジョブサマリーの一覧をプログラムから取得するには、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
モデルの入出力仕様
コンパイル済みおよびリンク済みのモデルには、各テンソルの名前、形状、データ型を記述する入力および出力テンソルの仕様があります。これらは 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 のリストに対応付ける辞書です。単一グラフのモデルではキーは None です。複数グラフのモデル(例: linked context binaries)では、グラフ名がキーとして使われます。
# 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}")
ジョブアーティファクトのダウンロード
ジョブは実行中にアーティファクトを生成します。ジョブの種類によって、アーティファクトにはサーバーログ、デバイスログ、オペレーション単位(op-by-op)のタイミングサマリー、または QNN HTP Analysis Summary(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 契約の一部ではありません。