-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[QNN EP] Build x64 python wheel for QNN EP (#19499)
### Description Adds a job to the python packaging pipeline that builds x64 python wheels for QNN EP. ### Motivation and Context Necessary to create a cached QNN model on Windows x64, which is done by creating a properly configured onnxruntime session with QNN EP.
- Loading branch information
1 parent
605adb0
commit 27c0a2f
Showing
3 changed files
with
194 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
177 changes: 177 additions & 0 deletions
177
tools/ci_build/github/azure-pipelines/templates/py-win-x64-qnn.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
parameters: | ||
|
||
- name: MACHINE_POOL | ||
type: string | ||
default: 'Onnxruntime-QNNEP-Windows-2022-CPU' | ||
|
||
- name: QNN_SDK | ||
displayName: QNN Windows SDK path | ||
type: string | ||
default: qnn-v2.18.0.240101_win | ||
|
||
- name: ENV_SETUP_SCRIPT | ||
type: string | ||
default: '' | ||
|
||
- name: BUILD_PY_PARAMETERS | ||
displayName: > | ||
Extra parameters to pass to build.py. Don't put newlines in here. | ||
type: string | ||
default: '' | ||
|
||
jobs: | ||
- job: Win_py_x64_qnn_Wheels | ||
timeoutInMinutes: 210 | ||
workspace: | ||
clean: all | ||
pool: | ||
name: ${{ parameters.MACHINE_POOL }} | ||
strategy: | ||
matrix: | ||
Python38_x64: | ||
PythonVersion: '3.8' | ||
Python39_x64: | ||
PythonVersion: '3.9' | ||
Python310_x64: | ||
PythonVersion: '3.10' | ||
Python311_x64: | ||
PythonVersion: '3.11' | ||
Python312_x64: | ||
PythonVersion: '3.12' | ||
variables: | ||
GRADLE_OPTS: '-Dorg.gradle.daemon=false' | ||
VSGenerator: 'Visual Studio 17 2022' | ||
QNN_SDK_ROOTDIR: 'C:\data\qnnsdk\${{parameters.QNN_SDK}}' | ||
steps: | ||
- checkout: self | ||
clean: true | ||
submodules: recursive | ||
|
||
- template: telemetry-steps.yml | ||
|
||
- script: | | ||
DIR C:\data\qnnsdk | ||
displayName: Check available QNN SDKs | ||
- task: UsePythonVersion@0 | ||
inputs: | ||
versionSpec: $(PythonVersion) | ||
addToPath: true | ||
architecture: 'x64' | ||
|
||
- task: onebranch.pipeline.tsaoptions@1 | ||
displayName: 'OneBranch TSAOptions' | ||
inputs: | ||
tsaConfigFilePath: '$(Build.SourcesDirectory)\.config\tsaoptions.json' | ||
appendSourceBranchName: false | ||
|
||
- task: PythonScript@0 | ||
inputs: | ||
scriptSource: inline | ||
script: | | ||
import sys | ||
np_version = 'numpy==1.21.6' if sys.version_info < (3, 11) else 'numpy==1.24.2' | ||
import subprocess | ||
subprocess.call(['pip', 'install', '-q', 'setuptools', 'wheel', np_version]) | ||
workingDirectory: '$(Build.BinariesDirectory)' | ||
displayName: 'Install python modules' | ||
|
||
- template: download-deps.yml | ||
|
||
- task: PythonScript@0 | ||
displayName: 'Update deps.txt' | ||
inputs: | ||
scriptPath: $(Build.SourcesDirectory)/tools/ci_build/replace_urls_in_deps.py | ||
arguments: --new_dir $(Build.BinariesDirectory)/deps | ||
workingDirectory: $(Build.BinariesDirectory) | ||
|
||
- task: PowerShell@2 | ||
displayName: 'Install ONNX' | ||
inputs: | ||
filePath: '$(Build.SourcesDirectory)/tools/ci_build/github/windows/install_third_party_deps.ps1' | ||
workingDirectory: '$(Build.BinariesDirectory)' | ||
arguments: -cpu_arch x64 -install_prefix $(Build.BinariesDirectory)\RelWithDebInfo\installed -build_config RelWithDebInfo | ||
|
||
- template: set-nightly-build-option-variable-step.yml | ||
|
||
- task: PythonScript@0 | ||
displayName: 'Generate cmake config' | ||
inputs: | ||
scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' | ||
arguments: > | ||
--config RelWithDebInfo | ||
--build_dir $(Build.BinariesDirectory) | ||
--skip_submodule_sync | ||
--cmake_generator "$(VSGenerator)" | ||
--use_qnn | ||
--qnn_home $(QNN_SDK_ROOTDIR) | ||
--enable_pybind | ||
--parallel --update | ||
$(TelemetryOption) ${{ parameters.BUILD_PY_PARAMETERS }} | ||
workingDirectory: '$(Build.BinariesDirectory)' | ||
|
||
- task: VSBuild@1 | ||
displayName: 'Build' | ||
inputs: | ||
solution: '$(Build.BinariesDirectory)\RelWithDebInfo\onnxruntime.sln' | ||
platform: 'x64' | ||
configuration: RelWithDebInfo | ||
msbuildArchitecture: 'x64' | ||
maximumCpuCount: true | ||
logProjectEvents: true | ||
workingFolder: '$(Build.BinariesDirectory)\RelWithDebInfo' | ||
createLogFile: true | ||
|
||
# Esrp signing | ||
- template: win-esrp-dll.yml | ||
parameters: | ||
FolderPath: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo\onnxruntime\capi' | ||
DisplayName: 'ESRP - Sign Native dlls' | ||
DoEsrp: true | ||
Pattern: '*.pyd,*.dll' | ||
|
||
- task: PythonScript@0 | ||
displayName: 'Build wheel' | ||
inputs: | ||
scriptPath: '$(Build.SourcesDirectory)\setup.py' | ||
arguments: 'bdist_wheel ${{ parameters.BUILD_PY_PARAMETERS }} $(NightlyBuildOption) --wheel_name_suffix=qnn' | ||
workingDirectory: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo' | ||
|
||
- task: CopyFiles@2 | ||
displayName: 'Copy Python Wheel to: $(Build.ArtifactStagingDirectory)' | ||
inputs: | ||
SourceFolder: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo\dist' | ||
Contents: '*.whl' | ||
TargetFolder: '$(Build.ArtifactStagingDirectory)' | ||
|
||
- task: PublishBuildArtifacts@1 | ||
displayName: 'Publish Artifact: ONNXRuntime python wheel' | ||
inputs: | ||
ArtifactName: onnxruntime_qnn | ||
|
||
- script: | | ||
7z x *.whl | ||
workingDirectory: '$(Build.ArtifactStagingDirectory)' | ||
displayName: 'unzip the package' | ||
- task: CredScan@3 | ||
displayName: 'Run CredScan' | ||
inputs: | ||
debugMode: false | ||
continueOnError: true | ||
|
||
- task: BinSkim@4 | ||
displayName: 'Run BinSkim' | ||
inputs: | ||
AnalyzeTargetGlob: '+:file|$(Build.ArtifactStagingDirectory)\**\*.dll' | ||
|
||
- task: TSAUpload@2 | ||
displayName: 'TSA upload' | ||
condition: and (succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) | ||
inputs: | ||
GdnPublishTsaOnboard: false | ||
GdnPublishTsaConfigFile: '$(Build.sourcesDirectory)\.gdn\.gdntsa' | ||
|
||
- template: component-governance-component-detection-steps.yml | ||
parameters: | ||
condition: 'succeeded' |