Skip to content

.github/workflows/windows-cuda-dependency.yml: upgrade to cuda 12.5.1… #125

.github/workflows/windows-cuda-dependency.yml: upgrade to cuda 12.5.1…

.github/workflows/windows-cuda-dependency.yml: upgrade to cuda 12.5.1… #125

Workflow file for this run

name: Build (Windows-NCNN)
on:
push:
paths:
- 'common/**'
- 'vsncnn/**'
- '.github/workflows/windows-ncnn.yml'
workflow_call:
inputs:
tag:
description: 'which tag to upload to'
required: true
type: string
ncnn_tag:
description: 'which tag of ncnn to use'
required: true
default: 'latest'
type: string
workflow_dispatch:
inputs:
tag:
description: 'which tag to upload to'
default: ''
ncnn_tag:
description: 'which tag of ncnn to use'
required: true
default: 'latest'
type: string
jobs:
build-windows:
runs-on: windows-2022
defaults:
run:
shell: cmd
working-directory: vsncnn
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
- name: Cache protobuf
id: cache-protobuf
uses: actions/cache@v4
with:
path: vsncnn/protobuf/install
key: ${{ runner.os }}-vsncnn-protobuf-v3.16.0
- name: Checkout protobuf
uses: actions/checkout@v4
if: steps.cache-protobuf.outputs.cache-hit != 'true'
with:
repository: protocolbuffers/protobuf
# follows protobuf in https://github.com/onnx/onnx/tree/v1.12.0#windows
# if you change this, remember to bump the version of the cache key of protobuf and onnx.
ref: v3.16.0
path: vsncnn/protobuf
- name: Configure protobuf
if: steps.cache-protobuf.outputs.cache-hit != 'true'
run: cmake -S protobuf\cmake -B protobuf\build_rel -G Ninja -LA
-D CMAKE_BUILD_TYPE=Release
-D protobuf_BUILD_SHARED_LIBS=OFF
-D protobuf_BUILD_TESTS=OFF
-D protobuf_MSVC_STATIC_RUNTIME=ON
- name: Build protobuf
if: steps.cache-protobuf.outputs.cache-hit != 'true'
run: cmake --build protobuf\build_rel --verbose
- name: Install protobuf
if: steps.cache-protobuf.outputs.cache-hit != 'true'
run: cmake --install protobuf\build_rel --prefix protobuf\install
- name: Cache onnx
id: cache-onnx
uses: actions/cache@v4
with:
path: vsncnn/onnx/install
key: ${{ runner.os }}-vsncnn-onnx-v1.12.0-protobuf-v3.16.0
- name: Checkout onnx
if: steps.cache-onnx.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
repository: onnx/onnx
ref: v1.12.0
path: vsncnn/onnx
- name: Configure onnx
if: steps.cache-onnx.outputs.cache-hit != 'true'
run: cmake -S onnx -B onnx\build -G Ninja -LA
-D CMAKE_BUILD_TYPE=Release
-D Protobuf_PROTOC_EXECUTABLE=protobuf\install\bin\protoc
-D Protobuf_LITE_LIBRARY=protobuf\install\lib
-D Protobuf_LIBRARIES=protobuf\install\lib
-D ONNX_USE_LITE_PROTO=ON -D ONNX_USE_PROTOBUF_SHARED_LIBS=OFF
-D ONNX_GEN_PB_TYPE_STUBS=OFF -D ONNX_ML=0
-D ONNX_USE_MSVC_STATIC_RUNTIME=1
- name: Build onnx
if: steps.cache-onnx.outputs.cache-hit != 'true'
run: cmake --build onnx\build --verbose
- name: Install onnx
if: steps.cache-onnx.outputs.cache-hit != 'true'
run: cmake --install onnx\build --prefix onnx\install
- name: Download VapourSynth headers
run: |
curl -s -o vs.zip -L https://github.com/vapoursynth/vapoursynth/archive/refs/tags/R54.zip
unzip -q vs.zip
mv vapoursynth-*/ vapoursynth/
- name: Download NCNN Precompilation
shell: bash
run: |
rev="${{github.event.inputs.ncnn_tag || inputs.ncnn_tag || 'latest'}}"
if [ "$rev" == "latest" ]; then
url="https://github.com/AmusementClub/ncnn/releases/latest/download/ncnn-gpu-x64-windows.zip"
else
url="https://github.com/AmusementClub/ncnn/releases/download/$rev/ncnn-gpu-x64-windows.zip"
fi
curl -s -o ncnn.zip -LJO "$url"
unzip -q ncnn.zip
# follows vulkan sdk in https://github.com/AmusementClub/ncnn/blob/github-actions/.github/workflows/windows-x64-gpu.yml
- name: Setup Vulkan SDK
shell: pwsh
run: |
Invoke-WebRequest -Uri https://sdk.lunarg.com/sdk/download/1.3.275.0/windows/VulkanSDK-1.3.275.0-Installer.exe?Human=true -OutFile VulkanSDK.exe
$installer = Start-Process -FilePath VulkanSDK.exe -Wait -PassThru -ArgumentList "--accept-licenses --default-answer --confirm-command install";
$installer.WaitForExit();
- name: Configure
run: cmake -S . -B build -G Ninja -LA
-D CMAKE_BUILD_TYPE=Release
-D CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
-D VAPOURSYNTH_INCLUDE_DIRECTORY=vapoursynth\include
-D protobuf_DIR=protobuf\install\cmake
-D ONNX_DIR=onnx\install\lib\cmake\ONNX
-D ncnn_DIR=ncnn\lib\cmake\ncnn
-D CMAKE_CXX_STANDARD=20
env:
VULKAN_SDK: C:\VulkanSDK\1.3.275.0
- name: Build
run: cmake --build build --verbose
- name: Install
run: |
cmake --install build --prefix install
mkdir artifact
copy install\bin\vsncnn.dll artifact\
- name: Upload
uses: actions/upload-artifact@v4
with:
name: VSNCNN-GPU-Windows-x64
path: vsncnn/artifact
- name: Setup Python portable
run: |
curl -s -o python.zip -LJO https://www.python.org/ftp/python/3.9.9/python-3.9.9-embed-amd64.zip
7z x python.zip -ovs_portable
- name: Install VapourSynth portable
run: |
curl -s -o vs.7z -LJO https://github.com/vapoursynth/vapoursynth/releases/download/R54/VapourSynth64-Portable-R54.7z
7z x vs.7z -ovs_portable -y
- name: Copy plugin & swiftshader
run: |
copy artifact\*.dll vs_portable\vapoursynth64\plugins
copy ncnn\tests\* vs_portable\
- name: Install waifu2x model
run: |
curl -s -o waifu2x.7z -LJO https://github.com/AmusementClub/vs-mlrt/releases/download/model-20211209/waifu2x_v3.7z
7z x waifu2x.7z -ovs_portable\vapoursynth64\plugins\models
- name: Download x265
run: |
curl -s -o x265.7z -LJO https://github.com/AmusementClub/x265/releases/download/Yuuki-3.5-AC3/x265-win64-x86-64-clang.Yuuki-3.5-AC3.7z
7z x x265.7z -ovs_portable\
- name: Create script
shell: bash
run: echo "import vapoursynth as vs;from vapoursynth import core;import sys;print(core.ncnn, core.ncnn.Version(), file=sys.stderr);core.std.BlankClip(format=vs.RGBS, width=127, height=63).ncnn.Model(r\"waifu2x\\upconv_7_anime_style_art_rgb\\scale2.0x_model.onnx\", builtin=True).resize.Bicubic(format=vs.YUV420P10, matrix_s='709').set_output()" > test.vpy
- name: Run vspipe
shell: bash
run: |
set -ex
vs_portable/vspipe -i test.vpy -
vs_portable/vspipe --y4m -p -e 9 test.vpy - | vs_portable/x265 --log-file x265.log --log-file-level info --y4m -D 10 --preset ultrafast -o out.hevc -
ls -l out.hevc x265.log
cat x265.log
grep -F 'encoded 10 frames' x265.log || exit 2
grep -i 'error' x265.log && exit 1
exit 0
- name: Create script (flexible output)
shell: bash
run: echo "import vapoursynth as vs;from vapoursynth import core;import sys;print(core.ncnn, core.ncnn.Version(), file=sys.stderr);prop='test';output=core.std.BlankClip(format=vs.RGBS, width=127, height=63).ncnn.Model(r\"waifu2x\\upconv_7_anime_style_art_rgb\\scale2.0x_model.onnx\", builtin=True, flexible_output_prop=prop);core.std.ShufflePlanes([output['clip'].std.PropToClip(prop=f'{prop}{i}') for i in range(output['num_planes'])], [0, 0, 0], vs.RGB).resize.Bicubic(format=vs.YUV420P10, matrix_s='709').set_output()" > test_flexible_output.vpy
- name: Run vspipe (flexible output)
shell: bash
run: |
set -ex
vs_portable/vspipe -i test_flexible_output.vpy -
vs_portable/vspipe --y4m -p -e 9 test_flexible_output.vpy - | vs_portable/x265 --log-file x265.log --log-file-level info --y4m -D 10 --preset ultrafast -o out.hevc -
ls -l out.hevc x265.log
cat x265.log
grep -F 'encoded 10 frames' x265.log || exit 2
grep -i 'error' x265.log && exit 1
exit 0
- name: Describe
run: git describe --tags --long
- name: Dump dependencies
run: dumpbin /dependents artifact\vsncnn.dll
- name: Compress artifact for release
if: github.event_name == 'workflow_dispatch' && github.event.inputs.tag != ''
run: |
cd artifact
7z a -t7z -mx=7 ../../VSNCNN-Windows-x64.${{ github.event.inputs.tag }}.7z .
- name: Release
uses: softprops/action-gh-release@v2
if: github.event_name == 'workflow_dispatch' && github.event.inputs.tag != ''
with:
tag_name: ${{ inputs.tag }}
files: VSNCNN-Windows-x64.${{ github.event.inputs.tag }}.7z
fail_on_unmatched_files: true
generate_release_notes: false
prerelease: true