Skip to content

Commit a5831a3

Browse files
authored
Minimize binary footprint of the FL nuget (microsoft#26961)
This pull-request removes the: - onnxruntime_providers_cuda.dll - onnxruntime_providers_qnn.dll - All the QNN binaries from the FL nuget package.
1 parent de398c4 commit a5831a3

3 files changed

Lines changed: 128 additions & 26 deletions

File tree

tools/ci_build/github/azure-pipelines/custom-nuget-packaging-pipeline.yml

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ parameters:
33
type: string
44
default: '12.8'
55

6-
- name: QnnSdk
7-
displayName: QNN SDK Version
8-
type: string
9-
default: 2.41.0.251128
10-
116
- name: IsReleaseBuild
127
displayName: Is a release build? Set it to true if you are doing an Onnx Runtime release.
138
type: boolean
@@ -115,19 +110,26 @@ extends:
115110
SpecificArtifact: false
116111
BuildId: '0'
117112

118-
- template: templates/qnn-ep-win.yml
113+
- template: templates/win-ci.yml
114+
parameters:
115+
PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }}
116+
PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }}
117+
ort_build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU'
118+
DoCompliance: false
119+
DoEsrp: true
120+
stage_name_suffix: CPU_arm64
121+
buildArch: x64
122+
msbuildPlatform: arm64
123+
packageName: arm64
124+
buildparameter: --arm64ec --buildasx --caller_framework WinAI
125+
runTests: false
126+
buildJava: false
127+
buildNodejs: false
128+
129+
- template: templates/managed-nuget-for-foundry-local.yml
119130
parameters:
120-
qnn_ep_build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU'
121-
QnnSdk: ${{ parameters.QnnSdk }}
122131
IsReleaseBuild: ${{ parameters.IsReleaseBuild }}
123132
DoEsrp: true
124-
ArtifactName: 'drop-nuget-qnn-arm64'
125-
# Add --use_webgpu to enable WebGPU
126-
StageName: 'OnnxRuntime_QNN_Nuget_Win_Arm64'
127-
build_config: 'RelWithDebInfo'
128-
PublishArchive: true
129-
PublishNugetToFeed: false
130-
AdditionalBuildArgs: '--caller_framework WinAI'
131133

132134
- template: templates/mac-cpu-packaging-pipeline.yml
133135
parameters:
@@ -136,7 +138,7 @@ extends:
136138
DoEsrp: true
137139

138140
- stage: NugetPackaging
139-
dependsOn: [Windows_Packaging_CUDA, OnnxRuntime_QNN_Nuget_Win_Arm64, MacOS_C_API_Package_Publish]
141+
dependsOn: [Windows_Packaging_CUDA, Windows_Packaging_CPU_arm64, ManagedNugetPackaging, MacOS_C_API_Package_Publish]
140142
jobs:
141143
- job: CreateNugetPackage
142144
pool: 'Onnxruntime-Win2022-GPU-A10'
@@ -158,7 +160,7 @@ extends:
158160
- task: DownloadPipelineArtifact@0
159161
displayName: 'Download Pipeline Artifact - managed nuget'
160162
inputs:
161-
artifactName: 'drop-signed-nuget-qnn'
163+
artifactName: 'onnxruntime-managed-nuget'
162164
targetPath: '$(Build.BinariesDirectory)/managed-nuget'
163165

164166
- task: DownloadPipelineArtifact@0
@@ -170,7 +172,7 @@ extends:
170172
- task: DownloadPipelineArtifact@0
171173
displayName: 'Download Pipeline Artifact - win-arm64'
172174
inputs:
173-
artifactName: 'onnxruntime-win-arm64x-qnn'
175+
artifactName: 'onnxruntime-win-arm64'
174176
targetPath: '$(Build.BinariesDirectory)/win-arm64'
175177

176178
- task: DownloadPipelineArtifact@0
@@ -229,11 +231,11 @@ extends:
229231
targetType: 'inline'
230232
script: |
231233
Expand-Archive -Path $(Build.BinariesDirectory)/win-x64/onnxruntime-win-x64-cuda*.zip -DestinationPath $(Build.BinariesDirectory)/win-x64
232-
Expand-Archive -Path $(Build.BinariesDirectory)/win-arm64/onnxruntime-win-arm64x-qnn*.zip -DestinationPath $(Build.BinariesDirectory)/win-arm64
234+
Expand-Archive -Path $(Build.BinariesDirectory)/win-arm64/onnxruntime-win-arm64*.zip -DestinationPath $(Build.BinariesDirectory)/win-arm64
233235
$osx_arm64_archive = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName
234236
tar -xzf $osx_arm64_archive -C $(Build.BinariesDirectory)/osx-arm64 2>$null
235237
$win_x64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-x64 -Filter onnxruntime-win-x64-cuda*)[0].FullName
236-
$win_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-arm64 -Filter onnxruntime-win-arm64x-qnn*)[0].FullName
238+
$win_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-arm64 -Filter onnxruntime-win-arm64*)[0].FullName
237239
$osx_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName
238240
Write-Host "##vso[task.setvariable variable=win_x64;]$win_x64"
239241
Write-Host "##vso[task.setvariable variable=win_arm64;]$win_arm64"
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
parameters:
2+
build_config: 'RelWithDebInfo'
3+
IsReleaseBuild: false
4+
DoEsrp: false
5+
OrtNugetPackageId: 'Microsoft.ML.OnnxRuntime'
6+
StageName: 'ManagedNugetPackaging'
7+
8+
stages:
9+
- stage: ${{ parameters.StageName }}
10+
dependsOn: [Setup, Windows_Packaging_CUDA]
11+
jobs:
12+
- job: ${{ parameters.StageName }}
13+
timeoutInMinutes: 300
14+
pool:
15+
name: 'onnxruntime-Win2022-GPU-A10'
16+
os: windows
17+
templateContext:
18+
sdl:
19+
codeSignValidation:
20+
enabled: true
21+
break: true
22+
psscriptanalyzer:
23+
enabled: true
24+
binskim:
25+
enabled: true
26+
scanOutputDirectoryOnly: true
27+
outputs:
28+
- output: pipelineArtifact
29+
targetPath: $(Build.ArtifactStagingDirectory)
30+
artifactName: "onnxruntime-managed-nuget"
31+
variables:
32+
OrtPackageId: ${{ parameters.OrtNugetPackageId }}
33+
ReleaseVersionSuffix: $[stageDependencies.Setup.Set_Variables.outputs['Set_Release_Version_Suffix.ReleaseVersionSuffix']]
34+
BuildDate: $[stageDependencies.Setup.Set_Variables.outputs['Set_Build_Date.BuildDate']]
35+
BuildTime: $[stageDependencies.Setup.Set_Variables.outputs['Set_Build_Time.BuildTime']]
36+
37+
steps:
38+
- template: set-version-number-variables-step.yml
39+
40+
- task: UsePythonVersion@0
41+
displayName: 'Use Python'
42+
inputs:
43+
versionSpec: 3.12
44+
45+
- task: DownloadPipelineArtifact@0
46+
displayName: 'Download Pipeline Artifact - win-x64'
47+
inputs:
48+
artifactName: 'onnxruntime-win-x64-cuda'
49+
targetPath: '$(Build.BinariesDirectory)/nuget-artifact'
50+
51+
# Reconstruct the build dir
52+
- task: PowerShell@2
53+
displayName: 'Extract native libraries for addition to nuget native package'
54+
inputs:
55+
targetType: filePath
56+
filePath: $(Build.SourcesDirectory)\tools\ci_build\github\windows\extract_nuget_files.ps1
57+
58+
- task: MSBuild@1
59+
displayName: 'Restore NuGet Packages and create project.assets.json'
60+
inputs:
61+
solution: '$(Build.SourcesDirectory)\csharp\OnnxRuntime.CSharp.sln'
62+
platform: 'Any CPU'
63+
configuration: RelWithDebInfo
64+
msbuildArguments: '-t:restore -p:OrtPackageId=Microsoft.ML.OnnxRuntime'
65+
workingDirectory: '$(Build.SourcesDirectory)\csharp'
66+
67+
- task: MSBuild@1
68+
displayName: 'Build C# bindings'
69+
inputs:
70+
solution: '$(Build.SourcesDirectory)\csharp\OnnxRuntime.CSharp.sln'
71+
platform: 'Any CPU'
72+
configuration: RelWithDebInfo
73+
msbuildArguments: '-p:OnnxRuntimeBuildDirectory="$(Build.BinariesDirectory)" -p:OrtPackageId=Microsoft.ML.OnnxRuntime -p:IsReleaseBuild=${{ parameters.IsReleaseBuild }} -p:ReleaseVersionSuffix=$(ReleaseVersionSuffix) -p:PackageVersion=$(OnnxRuntimeVersion)'
74+
workingDirectory: '$(Build.SourcesDirectory)\csharp'
75+
76+
- template: win-esrp-dll.yml
77+
parameters:
78+
FolderPath: '$(Build.SourcesDirectory)\csharp\src\Microsoft.ML.OnnxRuntime\bin\RelWithDebInfo'
79+
DisplayName: 'ESRP - Sign C# dlls'
80+
DoEsrp: true
81+
82+
- task: MSBuild@1
83+
displayName: 'Build Nuget Packages'
84+
inputs:
85+
solution: '$(Build.SourcesDirectory)\csharp\OnnxRuntime.CSharp.proj'
86+
platform: 'Any CPU'
87+
configuration: RelWithDebInfo
88+
msbuildArguments: '-t:CreatePackage -p:OnnxRuntimeBuildDirectory="$(Build.BinariesDirectory)" -p:OrtPackageId=Microsoft.ML.OnnxRuntime -p:IsReleaseBuild=${{ parameters.IsReleaseBuild }} -p:ReleaseVersionSuffix=$(ReleaseVersionSuffix) -p:CurrentTime=$(BuildTime) -p:CurrentDate=$(BuildDate)'
89+
workingDirectory: '$(Build.SourcesDirectory)\csharp'
90+
91+
- task: CopyFiles@2
92+
displayName: 'Copy managed nuget package to: $(Build.ArtifactStagingDirectory)'
93+
inputs:
94+
SourceFolder: '$(Build.SourcesDirectory)\csharp\src\Microsoft.ML.OnnxRuntime\bin\RelWithDebInfo'
95+
Contents: '*.nupkg'
96+
TargetFolder: '$(Build.ArtifactStagingDirectory)'
97+
98+
- template: esrp_nuget.yml
99+
parameters:
100+
DisplayName: 'ESRP - sign NuGet package'
101+
FolderPath: '$(Build.ArtifactStagingDirectory)'
102+
DoEsrp: true

tools/nuget/generate_nuspec_for_custom_nuget.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ def generate_files(lines, args):
1818
"osx-arm64": args.osx_arm64,
1919
}
2020

21-
avoid_keywords = {"pdb"}
21+
avoid_keywords = {"pdb", "onnxruntime_providers_cuda"}
2222
processed_includes = set()
2323
for platform, platform_dir in platform_map.items():
2424
for file in glob.glob(os.path.join(platform_dir, "lib", "*")):
2525
if not os.path.isfile(file):
2626
continue
27-
if any(keyword in file for keyword in avoid_keywords):
28-
continue
27+
2928
file_name = os.path.basename(file)
29+
if any(keyword in file_name for keyword in avoid_keywords):
30+
continue
3031

3132
files_list.append(f'<file src="{file}" target="runtimes/{platform}/native/{file_name}" />')
3233

@@ -51,9 +52,6 @@ def generate_files(lines, args):
5152
files_list.append(
5253
f'<file src="{os.path.join(args.root_dir, "ORT_icon_for_light_bg.png")}" target="ORT_icon_for_light_bg.png" />'
5354
)
54-
files_list.append(
55-
f'<file src="{os.path.join(args.win_arm64, "Qualcomm_LICENSE.pdf")}" target="Qualcomm_LICENSE.pdf" />'
56-
)
5755

5856
source_props = os.path.join(
5957
args.root_dir,

0 commit comments

Comments
 (0)