ENH: Enable RunsOn GPU support for lecture builds #1339
Workflow file for this run
This file contains hidden or 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
| name: Build Project [using jupyter-book] | |
| on: [pull_request] | |
| jobs: | |
| preview: | |
| runs-on: "runs-on=${{ github.run_id }}/family=g4dn.2xlarge/image=quantecon_ubuntu2404/disk=large" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 # Fetch full git history for changelog feature | |
| - name: Setup Anaconda | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| auto-update-conda: true | |
| auto-activate-base: true | |
| miniconda-version: 'latest' | |
| python-version: "3.13" | |
| environment-file: environment.yml | |
| activate-environment: quantecon | |
| - name: Check nvidia Drivers | |
| shell: bash -l {0} | |
| run: nvidia-smi | |
| - name: Install JAX and Numpyro | |
| shell: bash -l {0} | |
| run: | | |
| pip install -U "jax[cuda13]" | |
| pip install numpyro | |
| python scripts/test-jax-install.py | |
| # === Benchmark Tests (Bare Metal, Jupyter, Jupyter-Book) === | |
| - name: Run Hardware Benchmarks (Bare Metal) | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Bare Metal Python Script Execution ===" | |
| python scripts/benchmark-hardware.py | |
| mkdir -p benchmark_results | |
| mv benchmark_results_baremetal.json benchmark_results/ | |
| - name: Run Jupyter Notebook Benchmark (via nbconvert) | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Jupyter Kernel Execution ===" | |
| cd scripts | |
| jupyter nbconvert --to notebook --execute benchmark-jupyter.ipynb --output benchmark-jupyter-executed.ipynb | |
| echo "Notebook executed successfully" | |
| cd .. | |
| mv scripts/benchmark_results_jupyter.json benchmark_results/ | |
| - name: Run Jupyter-Book Benchmark | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Jupyter-Book Execution ===" | |
| # Build just the benchmark file using jupyter-book | |
| mkdir -p benchmark_test | |
| cp scripts/benchmark-jupyterbook.md benchmark_test/ | |
| # Create minimal _config.yml | |
| echo "title: Benchmark Test" > benchmark_test/_config.yml | |
| echo "execute:" >> benchmark_test/_config.yml | |
| echo " execute_notebooks: force" >> benchmark_test/_config.yml | |
| # Create minimal _toc.yml | |
| echo "format: jb-book" > benchmark_test/_toc.yml | |
| echo "root: benchmark-jupyterbook" >> benchmark_test/_toc.yml | |
| # Build | |
| jb build benchmark_test --path-output benchmark_build/ | |
| echo "Jupyter-Book build completed successfully" | |
| # Move JSON results if generated | |
| if [ -f benchmark_test/benchmark_results_jupyterbook.json ]; then | |
| mv benchmark_test/benchmark_results_jupyterbook.json benchmark_results/ | |
| elif [ -f benchmark_results_jupyterbook.json ]; then | |
| mv benchmark_results_jupyterbook.json benchmark_results/ | |
| fi | |
| - name: Collect and Upload Benchmark Results | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: benchmark-results | |
| path: benchmark_results/ | |
| - name: Display Benchmark Results | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Benchmark Results Summary ===" | |
| for f in benchmark_results/*.json; do | |
| echo "--- $f ---" | |
| cat "$f" | |
| echo "" | |
| done | |
| - name: Install latex dependencies | |
| run: | | |
| sudo apt-get -qq update | |
| sudo apt-get install -y \ | |
| texlive-latex-recommended \ | |
| texlive-latex-extra \ | |
| texlive-fonts-recommended \ | |
| texlive-fonts-extra \ | |
| texlive-xetex \ | |
| latexmk \ | |
| xindy \ | |
| dvipng \ | |
| cm-super | |
| - name: Display Conda Environment Versions | |
| shell: bash -l {0} | |
| run: conda list | |
| - name: Display Pip Versions | |
| shell: bash -l {0} | |
| run: pip list | |
| - name: Download "build" folder (cache) | |
| uses: dawidd6/action-download-artifact@v11 | |
| with: | |
| workflow: cache.yml | |
| branch: main | |
| name: build-cache | |
| path: _build | |
| # Build Assets (Download Notebooks and PDF via LaTeX) | |
| - name: Build Download Notebooks (sphinx-tojupyter) | |
| shell: bash -l {0} | |
| run: | | |
| jb build lectures --path-output ./ --builder=custom --custom-builder=jupyter -n -W --keep-going | |
| mkdir -p _build/html/_notebooks | |
| cp -u _build/jupyter/*.ipynb _build/html/_notebooks | |
| - name: Build PDF from LaTeX | |
| shell: bash -l {0} | |
| run: | | |
| jb build lectures --builder pdflatex --path-output ./ -n -W --keep-going | |
| mkdir _build/html/_pdf | |
| cp -u _build/latex/*.pdf _build/html/_pdf | |
| # Final Build of HTML | |
| - name: Build HTML | |
| shell: bash -l {0} | |
| run: | | |
| jb build lectures --path-output ./ -n -W --keep-going | |
| - name: Upload Execution Reports | |
| uses: actions/upload-artifact@v5 | |
| if: failure() | |
| with: | |
| name: execution-reports | |
| path: _build/html/reports | |
| - name: Preview Deploy to Netlify | |
| uses: nwtgck/actions-netlify@v3 | |
| with: | |
| publish-dir: '_build/html/' | |
| production-branch: main | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| deploy-message: "Preview Deploy from GitHub Actions" | |
| env: | |
| NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} | |
| NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} |