diff --git a/.github/packaging/post_build_script.sh b/.github/packaging/post_build_script.sh new file mode 100644 index 000000000..a4e2fc888 --- /dev/null +++ b/.github/packaging/post_build_script.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -euxo pipefail + +FORGE_WHEEL=${GITHUB_WORKSPACE}/${REPOSITORY}/dist/*.whl +WHL_DIR="${GITHUB_WORKSPACE}/wheels/dist" +DIST=dist/ + +ls -l "${WHL_DIR}" +ls ${FORGE_WHEEL} +echo "Copying files from $WHL_DIR to $DIST" +mkdir -p $DIST && find "$WHL_DIR" -maxdepth 1 -type f -exec cp {} "$DIST/" \; +echo "The following wheels will be uploaded to S3" +ls -l "${DIST}" diff --git a/.github/packaging/pre_build_cpu.sh b/.github/packaging/pre_build_cpu.sh new file mode 100644 index 000000000..520bdedb1 --- /dev/null +++ b/.github/packaging/pre_build_cpu.sh @@ -0,0 +1,32 @@ +#!/bin/bash +set -euxo pipefail + +# Builds vLLM +# This script builds vLLM and places its wheel into dist/. + +VLLM_BRANCH="v0.10.0" +BUILD_DIR="$HOME/forge-build" + +# Push other files to the dist folder +WHL_DIR="${GITHUB_WORKSPACE}/wheels/dist" + +mkdir -p $BUILD_DIR +mkdir -p $WHL_DIR +echo "build dir is $BUILD_DIR" +echo "wheel dir is $WHL_DIR" + +build_vllm() { + cd "$BUILD_DIR" + + git clone https://github.com/vllm-project/vllm.git --branch $VLLM_BRANCH + cd "$BUILD_DIR/vllm" + + python use_existing_torch.py + pip install -r requirements/build.txt + export VERBOSE=1 + export CMAKE_VERBOSE_MAKEFILE=1 + export FORCE_CMAKE=1 + pip wheel -v --no-build-isolation --no-deps . -w "$WHL_DIR" +} + +build_vllm \ No newline at end of file diff --git a/.github/packaging/pre_build_gpu.sh b/.github/packaging/pre_build_gpu.sh new file mode 100644 index 000000000..d81f52782 --- /dev/null +++ b/.github/packaging/pre_build_gpu.sh @@ -0,0 +1,71 @@ +#!/bin/bash +set -euxo pipefail + +# Builds Monarch +# This script builds Monarch and places its wheel into dist/. + +MONARCH_COMMIT="265034a29ec3fb35919f4a9c23c65f2f4237190d" +BUILD_DIR="$HOME/forge-build" + +# Push other files to the dist folder +WHL_DIR="${GITHUB_WORKSPACE}/wheels/dist" + +mkdir -p $BUILD_DIR +mkdir -p $WHL_DIR +echo "build dir is $BUILD_DIR" +echo "wheel dir is $WHL_DIR" + +build_monarch() { + # Get Rust build related pieces + if ! command -v rustup &> /dev/null; then + echo "getting rustup" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + export PATH="$HOME/.cargo/bin:$PATH" + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + fi + + rustup toolchain install nightly + rustup default nightly + + if command -v dnf &>/dev/null; then + dnf install -y clang-devel \ + libibverbs rdma-core libmlx5 libibverbs-devel rdma-core-devel fmt-devel \ + libunwind-devel + elif command -v apt-get &>/dev/null; then + apt-get update + apt-get install -y clang libunwind-dev \ + libibverbs-dev librdmacm-dev libfmt-dev + fi + + cd "$BUILD_DIR" + git clone https://github.com/meta-pytorch/monarch.git + cd "$BUILD_DIR/monarch" + git checkout $MONARCH_COMMIT + + pip install -r build-requirements.txt + export USE_TENSOR_ENGINE=1 + export RUST_BACKTRACE=1 + export CARGO_TERM_VERBOSE=true + export CARGO_TERM_COLOR=always + pip wheel --no-build-isolation --no-deps . -w "$WHL_DIR" +} + +append_date() { + cd ${GITHUB_WORKSPACE}/${REPOSITORY} + # Appends the current date and time to the Forge wheel + version_file="assets/version.txt" + init_file="src/forge/__init__.py" + if [[ -n "$BUILD_VERSION" ]]; then + # Update the version in version.txt + echo "$BUILD_VERSION" > "$version_file" + # Create a variable named __version__ at the end of __init__.py + echo "__version__ = \"$BUILD_VERSION\"" >> "$init_file" + else + echo "Error: BUILD_VERSION environment variable is not set or empty." + exit 1 + fi +} + + +build_monarch +append_date \ No newline at end of file diff --git a/.github/workflows/build_vllm.yaml b/.github/workflows/build_vllm.yaml new file mode 100644 index 000000000..6938e16a6 --- /dev/null +++ b/.github/workflows/build_vllm.yaml @@ -0,0 +1,50 @@ +name: Build pinned vLLM against PyTorch nightly and upload + +on: + push: + branches: + - nightly + workflow_dispatch: + +permissions: + id-token: write + contents: read + +jobs: + build: + name: forge-cu129-nightly + uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@28a1b658404f17c8eabde5f7fe25ae3ac826fae6 + strategy: + fail-fast: false + with: + repository: meta-pytorch/forge + ref: "" + test-infra-repository: pytorch/test-infra + test-infra-ref: 28a1b658404f17c8eabde5f7fe25ae3ac826fae6 + run-smoke-test: false + wheel-upload-path: preview/forge + package-name: forge + build-matrix: | + { + "include": [ + { + "python_version": "3.10", + "gpu_arch_type": "cpu", + "gpu_arch_version": "12.9", + "desired_cuda": "cu129", + "container_image": "pytorch/manylinux2_28-builder:cuda12.9", + "package_type": "manywheel", + "build_name": "manywheel-py3_10-cuda12_9", + "validation_runner": "linux.12xlarge.memory", + "installation": "pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu129", + "channel": "nightly", + "upload_to_base_bucket": "no", + "stable_version": "2.8.0", + "use_split_build": false + } + ] + } + pre-script: .github/packaging/pre_build_cpu.sh + post-script: .github/packaging/post_build_script.sh + trigger-event: ${{ github.event_name }} + build-platform: 'python-build-package' \ No newline at end of file diff --git a/.github/workflows/build_wheels.yaml b/.github/workflows/build_wheels.yaml new file mode 100644 index 000000000..22c183314 --- /dev/null +++ b/.github/workflows/build_wheels.yaml @@ -0,0 +1,50 @@ +name: Build nightly wheels and publish to PyTorch Index + +on: + push: + branches: + - nightly + workflow_dispatch: + +permissions: + id-token: write + contents: read + +jobs: + build: + name: forge-cu129-nightly + uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@28a1b658404f17c8eabde5f7fe25ae3ac826fae6 + strategy: + fail-fast: false + with: + repository: meta-pytorch/forge + ref: "" + test-infra-repository: pytorch/test-infra + test-infra-ref: 28a1b658404f17c8eabde5f7fe25ae3ac826fae6 + run-smoke-test: false + wheel-upload-path: preview/forge + package-name: forge + build-matrix: | + { + "include": [ + { + "python_version": "3.10", + "gpu_arch_type": "cuda", + "gpu_arch_version": "12.9", + "desired_cuda": "cu129", + "container_image": "pytorch/manylinux2_28-builder:cuda12.9", + "package_type": "manywheel", + "build_name": "manywheel-py3_10-cuda12_9", + "validation_runner": "linux.4xlarge.nvidia.gpu", + "installation": "pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu129", + "channel": "nightly", + "upload_to_base_bucket": "no", + "stable_version": "2.8.0", + "use_split_build": false + } + ] + } + pre-script: .github/packaging/pre_build_gpu.sh + post-script: .github/packaging/post_build_script.sh + trigger-event: ${{ github.event_name }} + build-platform: 'python-build-package' \ No newline at end of file diff --git a/src/forge/__init__.py b/src/forge/__init__.py index 17d7bd153..b359f9c5b 100644 --- a/src/forge/__init__.py +++ b/src/forge/__init__.py @@ -4,6 +4,8 @@ # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. +__version__ = "" + # Enables faster downloading. For more info: https://huggingface.co/docs/huggingface_hub/en/guides/download#faster-downloads # To disable, run `HF_HUB_ENABLE_HF_TRANSFER=0 tune download ` try: diff --git a/version.txt b/version.txt new file mode 100644 index 000000000..6e8bf73aa --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +0.1.0