-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create pkgci.yml and pkgci_build_packages.yml. #589
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Copyright 2024 Advanced Micro Devices, Inc. | ||
# | ||
# Licensed under the Apache License v2.0 with LLVM Exceptions. | ||
# See https://llvm.org/LICENSE.txt for license information. | ||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
|
||
name: PkgCI | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
push: | ||
branches: | ||
- main | ||
|
||
permissions: | ||
contents: read | ||
|
||
concurrency: | ||
# A PR number if a pull request and otherwise the commit hash. This cancels | ||
# queued and in-progress runs for the same PR (presubmit) or commit | ||
# (postsubmit). The workflow name is prepended to avoid conflicts between | ||
# different workflows. | ||
group: ${{ github.workflow }}-${{ github.event.number || github.sha }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
build_packages: | ||
name: Build Packages | ||
uses: ./.github/workflows/pkgci_build_packages.yml |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# Copyright 2024 Advanced Micro Devices, Inc. | ||
# | ||
# Licensed under the Apache License v2.0 with LLVM Exceptions. | ||
# See https://llvm.org/LICENSE.txt for license information. | ||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
|
||
name: PkgCI Build Packages | ||
|
||
on: | ||
workflow_call: | ||
|
||
permissions: | ||
contents: read | ||
|
||
jobs: | ||
build_packages: | ||
runs-on: ubuntu-24.04 | ||
env: | ||
CACHE_DIR: ${{ github.workspace }}/.shark-ai-cache | ||
OUTPUT_DIR: "${{ github.workspace }}/bindist" | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||
- name: Setup Python | ||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 | ||
with: | ||
python-version: 3.12 | ||
|
||
# Setup metadata. | ||
- name: Install Python packages | ||
run: pip install packaging | ||
- name: Generate dev package versions | ||
id: version_rc | ||
run: | | ||
version_suffix=".dev0+${{ github.sha }}" | ||
echo "version_suffix=${version_suffix}" >> $GITHUB_ENV | ||
sharktank_package_version=$(python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} sharktank) | ||
shortfin_package_version=$(python3 build_tools/python_deploy/compute_local_version.py --version-suffix=${version_suffix} shortfin) | ||
sharkai_package_version=$(python3 build_tools/python_deploy/compute_common_version.py -rc --version-suffix=${version_suffix} --write-json) | ||
|
||
- name: Enable cache | ||
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 | ||
with: | ||
path: ${{ env.CACHE_DIR }} | ||
key: shark-ai-pkgci-linux-packages-x86_64-v1-${{ github.sha }} | ||
restore-keys: | | ||
shark-ai-pkgci-linux-packages-x86_64-v1- | ||
|
||
# Build dev packages. | ||
- name: Build sharktank | ||
run: | | ||
./sharktank/build_tools/build_linux_package.sh | ||
- name: Build shortfin | ||
env: | ||
OVERRIDE_PYTHON_VERSIONS: cp311-cp311 | ||
SHORTFIN_ENABLE_TRACING: "OFF" | ||
run: | | ||
./shortfin/build_tools/build_linux_package.sh | ||
- name: Build shark-ai | ||
run: | | ||
./build_tools/python_deploy/write_requirements.py --version-suffix=${version_suffix} | ||
./shark-ai/build_tools/build_linux_package.sh | ||
|
||
# Upload. | ||
- name: Upload python wheels | ||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | ||
with: | ||
if-no-files-found: error | ||
name: linux_x86_64_dev_packages | ||
path: bindist |
Original file line number | Diff line number | Diff line change | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -14,9 +14,10 @@ | |||||||||||
# Build everything (all python versions): | ||||||||||||
# sudo ./build_tools/build_linux_package.sh | ||||||||||||
# | ||||||||||||
# Build specific Python versions to custom directory: | ||||||||||||
# Build specific Python versions to custom directory, with tracing enabled: | ||||||||||||
# OVERRIDE_PYTHON_VERSIONS="cp312-cp312 cp313-cp313" \ | ||||||||||||
# OUTPUT_DIR="/tmp/wheelhouse" \ | ||||||||||||
# SHORTFIN_ENABLE_TRACING="ON" \ | ||||||||||||
# sudo -E ./build_tools/build_linux_package.sh | ||||||||||||
# | ||||||||||||
# Valid Python versions match a subdirectory under /opt/python in the docker | ||||||||||||
|
@@ -43,6 +44,8 @@ ARCH="$(uname -m)" | |||||||||||
MANYLINUX_DOCKER_IMAGE="${MANYLINUX_DOCKER_IMAGE:-quay.io/pypa/manylinux2014_${ARCH}:latest}" | ||||||||||||
PYTHON_VERSIONS="${OVERRIDE_PYTHON_VERSIONS:-cp311-cp311 cp312-cp312 cp313-cp313}" | ||||||||||||
OUTPUT_DIR="${OUTPUT_DIR:-${THIS_DIR}/wheelhouse}" | ||||||||||||
CACHE_DIR="${CACHE_DIR:-}" | ||||||||||||
SHORTFIN_ENABLE_TRACING="${SHORTFIN_ENABLE_TRACING:-ON}" | ||||||||||||
|
||||||||||||
function run_on_host() { | ||||||||||||
echo "Running on host" | ||||||||||||
|
@@ -53,12 +56,23 @@ function run_on_host() { | |||||||||||
OUTPUT_DIR="$(cd "${OUTPUT_DIR}" && pwd)" | ||||||||||||
echo "Outputting to ${OUTPUT_DIR}" | ||||||||||||
mkdir -p "${OUTPUT_DIR}" | ||||||||||||
|
||||||||||||
# Setup cache as needed. | ||||||||||||
extra_args="" | ||||||||||||
if ! [ -z "$CACHE_DIR" ]; then | ||||||||||||
echo "Setting up host cache dir ${CACHE_DIR}" | ||||||||||||
mkdir -p "${CACHE_DIR}/ccache" | ||||||||||||
extra_args="${extra_args} -v ${CACHE_DIR}:${CACHE_DIR} -e CACHE_DIR=${CACHE_DIR}" | ||||||||||||
fi | ||||||||||||
|
||||||||||||
docker run --rm \ | ||||||||||||
-v "${REPO_ROOT}:${REPO_ROOT}" \ | ||||||||||||
-v "${OUTPUT_DIR}:${OUTPUT_DIR}" \ | ||||||||||||
-e __MANYLINUX_BUILD_WHEELS_IN_DOCKER=1 \ | ||||||||||||
-e "OVERRIDE_PYTHON_VERSIONS=${PYTHON_VERSIONS}" \ | ||||||||||||
-e "OUTPUT_DIR=${OUTPUT_DIR}" \ | ||||||||||||
-e "SHORTFIN_ENABLE_TRACING=${SHORTFIN_ENABLE_TRACING}" \ | ||||||||||||
${extra_args} \ | ||||||||||||
"${MANYLINUX_DOCKER_IMAGE}" \ | ||||||||||||
-- ${THIS_DIR}/${SCRIPT_NAME} | ||||||||||||
|
||||||||||||
|
@@ -75,6 +89,23 @@ function run_in_docker() { | |||||||||||
echo "Using python versions: ${PYTHON_VERSIONS}" | ||||||||||||
local orig_path="${PATH}" | ||||||||||||
|
||||||||||||
# Configure caching. | ||||||||||||
if [ -z "$CACHE_DIR" ]; then | ||||||||||||
echo "Cache directory not configured. No caching will take place." | ||||||||||||
else | ||||||||||||
# TODO: include this in the dockerfile we use so it gets cached | ||||||||||||
install_ccache | ||||||||||||
|
||||||||||||
# TODO: debug low cache hit rate (~30% hits out of 98% cacheable) on CI | ||||||||||||
mkdir -p "${CACHE_DIR}" | ||||||||||||
CACHE_DIR="$(cd ${CACHE_DIR} && pwd)" | ||||||||||||
echo "Caching build artifacts to ${CACHE_DIR}" | ||||||||||||
export CCACHE_DIR="${CACHE_DIR}/ccache" | ||||||||||||
export CCACHE_MAXSIZE="2G" | ||||||||||||
export CMAKE_C_COMPILER_LAUNCHER=ccache | ||||||||||||
export CMAKE_CXX_COMPILER_LAUNCHER=ccache | ||||||||||||
fi | ||||||||||||
|
||||||||||||
# Build phase. | ||||||||||||
echo "******************** BUILDING PACKAGE ********************" | ||||||||||||
for python_version in ${PYTHON_VERSIONS}; do | ||||||||||||
|
@@ -85,14 +116,44 @@ function run_in_docker() { | |||||||||||
fi | ||||||||||||
export PATH="${python_dir}/bin:${orig_path}" | ||||||||||||
echo ":::: Python version $(python --version)" | ||||||||||||
|
||||||||||||
clean_wheels "shortfin" "${python_version}" | ||||||||||||
build_shortfin | ||||||||||||
run_audit_wheel "shortfin" "${python_version}" | ||||||||||||
|
||||||||||||
if ! [ -z "$CACHE_DIR" ]; then | ||||||||||||
echo "ccache stats:" | ||||||||||||
ccache --show-stats | ||||||||||||
fi | ||||||||||||
done | ||||||||||||
} | ||||||||||||
|
||||||||||||
function install_ccache() { | ||||||||||||
# This gets an old version. | ||||||||||||
# yum install -y ccache | ||||||||||||
|
||||||||||||
CCACHE_VERSION="4.10.2" | ||||||||||||
|
||||||||||||
if [[ "${ARCH}" == "x86_64" ]]; then | ||||||||||||
curl --silent --fail --show-error --location \ | ||||||||||||
"https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-${ARCH}.tar.xz" \ | ||||||||||||
--output ccache.tar.xz | ||||||||||||
|
||||||||||||
tar xf ccache.tar.xz | ||||||||||||
cp ccache-${CCACHE_VERSION}-linux-${ARCH}/ccache /usr/local/bin | ||||||||||||
elif [[ "${ARCH}" == "aarch64" ]]; then | ||||||||||||
# Latest version of ccache is not released for arm64, built it | ||||||||||||
git clone --depth 1 --branch "v${CCACHE_VERSION}" https://github.com/ccache/ccache.git | ||||||||||||
mkdir -p ccache/build && cd "$_" | ||||||||||||
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release .. | ||||||||||||
ninja | ||||||||||||
cp ccache /usr/bin/ | ||||||||||||
Comment on lines
+144
to
+150
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We might at some point. I've written this code a few times before, most recently at https://github.com/iree-org/base-docker-images/blob/main/build_tools/install_ccache.sh, and supporting both architectures isn't much extra code. Better to write cross-platform/architecture code whenever possible instead of artificially limiting ourselves. I plan on updating https://github.com/nod-ai/base-docker-images/blob/main/dockerfiles/manylinux_x86_64.Dockerfile to more closely match https://github.com/iree-org/base-docker-images/blob/main/dockerfiles/manylinux_x86_64.Dockerfile, as part of upgrading from manylinux2014 to manylinux_2_28: shark-ai/shortfin/build_tools/build_linux_package.sh Lines 39 to 43 in 779adc3
|
||||||||||||
fi | ||||||||||||
} | ||||||||||||
|
||||||||||||
function build_shortfin() { | ||||||||||||
export SHORTFIN_ENABLE_TRACING=ON | ||||||||||||
# Note: The SHORTFIN_ENABLE_TRACING environment variable should have been | ||||||||||||
# forwarded from the host environment into Docker above. | ||||||||||||
python -m pip wheel --disable-pip-version-check -v -w "${OUTPUT_DIR}" "${REPO_ROOT}/shortfin" | ||||||||||||
} | ||||||||||||
|
||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
YES!