作業管理

查詢工作

若要以程式方式取得工作摘要清單,請使用 get_job_summaries()

import qai_hub as hub

client = hub.Client()
job_summaries = client.get_job_summaries(limit=10)
print(job_summaries)

若已從 UI 取得特定的工作 ID(以 j 開頭的 ID,例如 jvgdwk7z5),即可使用 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, .... ]
}

內存以Byte表示,時間以微秒表示。要獲取以毫秒為單位的延遲:

latency_ms = profile["execution_summary"]["execution_time"] / 1000

下載工作產出物(Job Artifacts)

工作(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)

若要下載所有可用的日誌(裝置日誌與 Hub 日誌):

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 合約範圍。

共享工作

默認情況下,所有工作僅對創建該工作的用戶可訪問。工作也可以以程式方式與特定帳戶共享,使用以下方法:

job.modify_sharing(add_emails=['name@company.com'])

權限也可以從特定帳戶中撤銷

job.modify_sharing(delete_emails=['name@company.com'])