| name: PR comment GitHub CI
|
|
|
| on:
|
| issue_comment:
|
| types:
|
| - created
|
| branches-ignore:
|
| - main
|
| concurrency:
|
| group: ${{ github.workflow }}-${{ github.event.issue.number }}-${{ startsWith(github.event.comment.body, 'run-slow') || startsWith(github.event.comment.body, 'run slow') || startsWith(github.event.comment.body, 'run_slow') }}
|
| cancel-in-progress: true
|
| permissions: read-all
|
|
|
| env:
|
| HF_HOME: /mnt/cache
|
| TRANSFORMERS_IS_CI: yes
|
| OMP_NUM_THREADS: 8
|
| MKL_NUM_THREADS: 8
|
| RUN_SLOW: yes
|
|
|
|
|
| HF_HUB_READ_TOKEN: ${{ secrets.HF_HUB_READ_TOKEN }}
|
| SIGOPT_API_TOKEN: ${{ secrets.SIGOPT_API_TOKEN }}
|
| TF_FORCE_GPU_ALLOW_GROWTH: true
|
| RUN_PT_TF_CROSS_TESTS: 1
|
| CUDA_VISIBLE_DEVICES: 0,1
|
|
|
| jobs:
|
| get-pr-number:
|
| runs-on: ubuntu-22.04
|
| name: Get PR number
|
|
|
| if: ${{ github.event.issue.state == 'open' && contains(fromJSON('["ydshieh", "ArthurZucker", "zucchini-nlp", "qubvel", "molbap", "gante", "LysandreJik", "Cyrilvallez", "Rocketknight1", "SunMarc", "muellerzr"]'), github.actor) && (startsWith(github.event.comment.body, 'run-slow') || startsWith(github.event.comment.body, 'run slow') || startsWith(github.event.comment.body, 'run_slow')) }}
|
| outputs:
|
| PR_NUMBER: ${{ steps.set_pr_number.outputs.PR_NUMBER }}
|
| steps:
|
| - name: Get PR number
|
| shell: bash
|
| run: |
|
| if [[ "${{ github.event.issue.number }}" != "" && "${{ github.event.issue.pull_request }}" != "" ]]; then
|
| echo "PR_NUMBER=${{ github.event.issue.number }}" >> $GITHUB_ENV
|
| else
|
| echo "PR_NUMBER=" >> $GITHUB_ENV
|
| fi
|
|
|
| - name: Check PR number
|
| shell: bash
|
| run: |
|
| echo "${{ env.PR_NUMBER }}"
|
|
|
| - name: Set PR number
|
| id: set_pr_number
|
| run: echo "PR_NUMBER=${{ env.PR_NUMBER }}" >> "$GITHUB_OUTPUT"
|
|
|
| get-sha:
|
| runs-on: ubuntu-22.04
|
| needs: get-pr-number
|
| if: ${{ needs.get-pr-number.outputs.PR_NUMBER != ''}}
|
| outputs:
|
| PR_HEAD_SHA: ${{ steps.get_sha.outputs.PR_HEAD_SHA }}
|
| PR_MERGE_SHA: ${{ steps.get_sha.outputs.PR_MERGE_SHA }}
|
| steps:
|
| - uses: actions/checkout@v4
|
| with:
|
| fetch-depth: "0"
|
| ref: "refs/pull/${{needs.get-pr-number.outputs.PR_NUMBER}}/merge"
|
|
|
| - name: Get SHA (and verify timestamps against the issue comment date)
|
| id: get_sha
|
| env:
|
| PR_NUMBER: ${{ needs.get-pr-number.outputs.PR_NUMBER }}
|
| COMMENT_DATE: ${{ github.event.comment.created_at }}
|
| run: |
|
| git fetch origin refs/pull/$PR_NUMBER/head:refs/remotes/pull/$PR_NUMBER/head
|
| git checkout refs/remotes/pull/$PR_NUMBER/head
|
| echo "PR_HEAD_SHA: $(git log -1 --format=%H)"
|
| echo "PR_HEAD_SHA=$(git log -1 --format=%H)" >> "$GITHUB_OUTPUT"
|
| git fetch origin refs/pull/$PR_NUMBER/merge:refs/remotes/pull/$PR_NUMBER/merge
|
| git checkout refs/remotes/pull/$PR_NUMBER/merge
|
| echo "PR_MERGE_SHA: $(git log -1 --format=%H)"
|
| echo "PR_MERGE_SHA=$(git log -1 --format=%H)" >> "$GITHUB_OUTPUT"
|
| PR_MERGE_COMMIT_TIMESTAMP=$(git log -1 --date=unix --format=%cd)
|
| echo "PR_MERGE_COMMIT_TIMESTAMP: $PR_MERGE_COMMIT_TIMESTAMP"
|
| COMMENT_TIMESTAMP=$(date -d "${COMMENT_DATE}" +"%s")
|
| echo "COMMENT_DATE: $COMMENT_DATE"
|
| echo "COMMENT_TIMESTAMP: $COMMENT_TIMESTAMP"
|
| if [ $COMMENT_TIMESTAMP -le $PR_MERGE_COMMIT_TIMESTAMP ]; then
|
| echo "Last commit on the pull request is newer than the issue comment triggering this run! Abort!";
|
| exit -1;
|
| fi
|
|
|
|
|
|
|
|
|
| get-tests:
|
| runs-on: ubuntu-22.04
|
| needs: [get-pr-number, get-sha]
|
| if: ${{ needs.get-pr-number.outputs.PR_NUMBER != ''}}
|
| outputs:
|
| models: ${{ steps.models_to_run.outputs.models }}
|
| quantizations: ${{ steps.models_to_run.outputs.quantizations }}
|
| steps:
|
| - uses: actions/checkout@v4
|
| with:
|
| fetch-depth: "0"
|
| ref: "refs/pull/${{needs.get-pr-number.outputs.PR_NUMBER}}/merge"
|
|
|
| - name: Verify merge commit SHA
|
| env:
|
| VERIFIED_PR_MERGE_SHA: ${{ needs.get-sha.outputs.PR_MERGE_SHA }}
|
| run: |
|
| PR_MERGE_SHA=$(git log -1 --format=%H)
|
| if [ $PR_MERGE_SHA != $VERIFIED_PR_MERGE_SHA ]; then
|
| echo "The merged commit SHA is not the same as the verified one! Security issue detected, abort the workflow!";
|
| exit -1;
|
| fi
|
|
|
| - name: Get models to test
|
| env:
|
| PR_COMMENT: ${{ github.event.comment.body }}
|
| run: |
|
| python -m pip install GitPython
|
| python utils/pr_slow_ci_models.py --message "$PR_COMMENT" | tee output.txt
|
| echo "models=$(tail -n 1 output.txt)" >> $GITHUB_ENV
|
| python utils/pr_slow_ci_models.py --message "$PR_COMMENT" --quantization | tee output2.txt
|
| echo "quantizations=$(tail -n 1 output2.txt)" >> $GITHUB_ENV
|
|
|
| - name: Show models to test
|
| id: models_to_run
|
| run: |
|
| echo "${{ env.models }}"
|
| echo "models=${{ env.models }}" >> $GITHUB_ENV
|
| echo "models=${{ env.models }}" >> $GITHUB_OUTPUT
|
| echo "${{ env.quantizations }}"
|
| echo "quantizations=${{ env.quantizations }}" >> $GITHUB_OUTPUT
|
|
|
| reply_to_comment:
|
| name: Reply to the comment
|
| if: ${{ needs.get-tests.outputs.models != '[]' || needs.get-tests.outputs.quantizations != '[]' }}
|
| needs: [get-pr-number, get-tests]
|
| permissions:
|
| pull-requests: write
|
| runs-on: ubuntu-22.04
|
| steps:
|
| - name: Reply to the comment
|
| env:
|
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
| MODELS: ${{ needs.get-tests.outputs.models }}
|
| BODY: "This comment contains run-slow, running the specified jobs:\n\nmodels: ${{ needs.get-tests.outputs.models }}\nquantizations: ${{ needs.get-tests.outputs.quantizations }}"
|
| run: |
|
| gh api \
|
| --method POST \
|
| -H "Accept: application/vnd.github+json" \
|
| -H "X-GitHub-Api-Version: 2022-11-28" \
|
| repos/${{ github.repository }}/issues/${{ needs.get-pr-number.outputs.PR_NUMBER }}/comments \
|
| -f "body=This comment contains run-slow, running the specified jobs: ${{ env.BODY }} ..."
|
|
|
| create_run:
|
| name: Create run
|
| if: ${{ needs.get-tests.outputs.models != '[]' || needs.get-tests.outputs.quantizations != '[]' }}
|
| needs: [get-sha, get-tests, reply_to_comment]
|
| permissions:
|
| statuses: write
|
| runs-on: ubuntu-22.04
|
| steps:
|
| - name: Create Run
|
| id: create_run
|
| env:
|
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
|
| GITHUB_RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
| run: |
|
| gh api \
|
| --method POST \
|
| -H "Accept: application/vnd.github+json" \
|
| -H "X-GitHub-Api-Version: 2022-11-28" \
|
| repos/${{ github.repository }}/statuses/${{ needs.get-sha.outputs.PR_HEAD_SHA }} \
|
| -f "target_url=$GITHUB_RUN_URL" -f "state=pending" -f "description=Slow CI job" -f "context=pytest/custom-tests"
|
|
|
| run_models_gpu:
|
| name: Run all tests for the model
|
| if: ${{ needs.get-tests.outputs.models != '[]' }}
|
| needs: [get-pr-number, get-sha, get-tests, create_run]
|
| strategy:
|
| fail-fast: false
|
| matrix:
|
| folders: ${{ fromJson(needs.get-tests.outputs.models) }}
|
| machine_type: [aws-g4dn-2xlarge-cache, aws-g4dn-12xlarge-cache]
|
| runs-on:
|
| group: '${{ matrix.machine_type }}'
|
| container:
|
| image: huggingface/transformers-all-latest-gpu
|
| options: --gpus all --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/
|
| steps:
|
| - name: Echo input and matrix info
|
| shell: bash
|
| run: |
|
| echo "${{ matrix.folders }}"
|
|
|
| - name: Echo folder ${{ matrix.folders }}
|
| shell: bash
|
|
|
|
|
| run: |
|
| echo "${{ matrix.folders }}"
|
| matrix_folders=${{ matrix.folders }}
|
| matrix_folders=${matrix_folders/'models/'/'models_'}
|
| echo "$matrix_folders"
|
| echo "matrix_folders=$matrix_folders" >> $GITHUB_ENV
|
|
|
| - name: Checkout to PR merge commit
|
| working-directory: /transformers
|
| run: |
|
| git fetch origin refs/pull/${{ needs.get-pr-number.outputs.PR_NUMBER }}/merge:refs/remotes/pull/${{ needs.get-pr-number.outputs.PR_NUMBER }}/merge
|
| git checkout refs/remotes/pull/${{ needs.get-pr-number.outputs.PR_NUMBER }}/merge
|
| git log -1 --format=%H
|
|
|
| - name: Verify merge commit SHA
|
| env:
|
| VERIFIED_PR_MERGE_SHA: ${{ needs.get-sha.outputs.PR_MERGE_SHA }}
|
| working-directory: /transformers
|
| run: |
|
| PR_MERGE_SHA=$(git log -1 --format=%H)
|
| if [ $PR_MERGE_SHA != $VERIFIED_PR_MERGE_SHA ]; then
|
| echo "The merged commit SHA is not the same as the verified one! Security issue detected, abort the workflow!";
|
| exit -1;
|
| fi
|
|
|
| - name: Reinstall transformers in edit mode (remove the one installed during docker image build)
|
| working-directory: /transformers
|
| run: python3 -m pip uninstall -y transformers && python3 -m pip install -e .
|
|
|
| - name: NVIDIA-SMI
|
| run: |
|
| nvidia-smi
|
|
|
| - name: Set `machine_type` for report and artifact names
|
| working-directory: /transformers
|
| shell: bash
|
| run: |
|
| echo "${{ matrix.machine_type }}"
|
| if [ "${{ matrix.machine_type }}" = "aws-g4dn-2xlarge-cache" ]; then
|
| machine_type=single-gpu
|
| elif [ "${{ matrix.machine_type }}" = "aws-g4dn-12xlarge-cache" ]; then
|
| machine_type=multi-gpu
|
| else
|
| machine_type=${{ matrix.machine_type }}
|
| fi
|
| echo "$machine_type"
|
| echo "machine_type=$machine_type" >> $GITHUB_ENV
|
|
|
| - name: Environment
|
| working-directory: /transformers
|
| run: |
|
| python3 utils/print_env.py
|
|
|
| - name: Show installed libraries and their versions
|
| working-directory: /transformers
|
| run: pip freeze
|
|
|
| - name: Run all tests on GPU
|
| working-directory: /transformers
|
| run: |
|
| export CUDA_VISIBLE_DEVICES="$(python3 utils/set_cuda_devices_for_ci.py --test_folder ${{ matrix.folders }})"
|
| echo $CUDA_VISIBLE_DEVICES
|
| python3 -m pytest -v -rsfE --make-reports=${{ env.machine_type }}_run_models_gpu_${{ matrix.folders }}_test_reports tests/${{ matrix.folders }}
|
|
|
| - name: Failure short reports
|
| if: ${{ failure() }}
|
| continue-on-error: true
|
| run: cat /transformers/reports/${{ env.machine_type }}_run_models_gpu_${{ matrix.folders }}_test_reports/failures_short.txt
|
|
|
| - name: Make sure report directory exists
|
| shell: bash
|
| run: |
|
| mkdir -p /transformers/reports/${{ env.machine_type }}_run_models_gpu_${{ matrix.folders }}_test_reports
|
| echo "hello" > /transformers/reports/${{ env.machine_type }}_run_models_gpu_${{ matrix.folders }}_test_reports/hello.txt
|
| echo "${{ env.machine_type }}_run_models_gpu_${{ matrix.folders }}_test_reports"
|
|
|
| - name: "Test suite reports artifacts: ${{ env.machine_type }}_run_models_gpu_${{ env.matrix_folders }}_test_reports"
|
| if: ${{ always() }}
|
| uses: actions/upload-artifact@v4
|
| with:
|
| name: ${{ env.machine_type }}_run_models_gpu_${{ env.matrix_folders }}_test_reports
|
| path: /transformers/reports/${{ env.machine_type }}_run_models_gpu_${{ matrix.folders }}_test_reports
|
|
|
| run_quantization_torch_gpu:
|
| name: Run all tests for a quantization
|
| if: ${{ needs.get-tests.outputs.quantizations != '[]' }}
|
| needs: [get-pr-number, get-sha, get-tests, create_run]
|
| strategy:
|
| fail-fast: false
|
| matrix:
|
| folders: ${{ fromJson(needs.get-tests.outputs.quantizations) }}
|
| machine_type: [aws-g4dn-2xlarge-cache, aws-g4dn-12xlarge-cache]
|
| runs-on:
|
| group: '${{ matrix.machine_type }}'
|
| container:
|
| image: huggingface/transformers-quantization-latest-gpu
|
| options: --gpus all --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/
|
| steps:
|
| - name: Echo folder ${{ matrix.folders }}
|
| shell: bash
|
| run: |
|
| echo "${{ matrix.folders }}"
|
| matrix_folders=${{ matrix.folders }}
|
| matrix_folders=${matrix_folders/'quantization/'/'quantization_'}
|
| echo "$matrix_folders"
|
| echo "matrix_folders=$matrix_folders" >> $GITHUB_ENV
|
|
|
| - name: Checkout to PR merge commit
|
| working-directory: /transformers
|
| run: |
|
| git fetch origin refs/pull/${{ needs.get-pr-number.outputs.PR_NUMBER }}/merge:refs/remotes/pull/${{ needs.get-pr-number.outputs.PR_NUMBER }}/merge
|
| git checkout refs/remotes/pull/${{ needs.get-pr-number.outputs.PR_NUMBER }}/merge
|
| git log -1 --format=%H
|
|
|
| - name: Verify merge commit SHA
|
| env:
|
| VERIFIED_PR_MERGE_SHA: ${{ needs.get-sha.outputs.PR_MERGE_SHA }}
|
| working-directory: /transformers
|
| run: |
|
| PR_MERGE_SHA=$(git log -1 --format=%H)
|
| if [ $PR_MERGE_SHA != $VERIFIED_PR_MERGE_SHA ]; then
|
| echo "The merged commit SHA is not the same as the verified one! Security issue detected, abort the workflow!";
|
| exit -1;
|
| fi
|
|
|
| - name: Reinstall transformers in edit mode (remove the one installed during docker image build)
|
| working-directory: /transformers
|
| run: python3 -m pip uninstall -y transformers && python3 -m pip install -e .
|
| - name: NVIDIA-SMI
|
| run: |
|
| nvidia-smi
|
|
|
| - name: Set `machine_type` for report and artifact names
|
| working-directory: /transformers
|
| shell: bash
|
| run: |
|
| echo "${{ matrix.machine_type }}"
|
| if [ "${{ matrix.machine_type }}" = "aws-g4dn-2xlarge-cache" ]; then
|
| machine_type=single-gpu
|
| elif [ "${{ matrix.machine_type }}" = "aws-g4dn-12xlarge-cache" ]; then
|
| machine_type=multi-gpu
|
| else
|
| machine_type=${{ matrix.machine_type }}
|
| fi
|
| echo "$machine_type"
|
| echo "machine_type=$machine_type" >> $GITHUB_ENV
|
|
|
| - name: Environment
|
| working-directory: /transformers
|
| run: |
|
| python3 utils/print_env.py
|
|
|
| - name: Show installed libraries and their versions
|
| working-directory: /transformers
|
| run: pip freeze
|
|
|
| - name: Run quantization tests on GPU
|
| working-directory: /transformers
|
| run: |
|
| python3 -m pytest -v --make-reports=${{ env.machine_type }}_run_quantization_torch_gpu_${{ matrix.folders }}_test_reports tests/${{ matrix.folders }}
|
|
|
| - name: Failure short reports
|
| if: ${{ failure() }}
|
| continue-on-error: true
|
| run: cat /transformers/reports/${{ env.machine_type }}_run_quantization_torch_gpu_${{ matrix.folders }}_test_reports/failures_short.txt
|
|
|
| - name: Make sure report directory exists
|
| shell: bash
|
| run: |
|
| mkdir -p /transformers/reports/${{ env.machine_type }}_run_quantization_gpu_${{ matrix.folders }}_test_reports
|
| echo "hello" > /transformers/reports/${{ env.machine_type }}_run_quantization_gpu_${{ matrix.folders }}_test_reports/hello.txt
|
| echo "${{ env.machine_type }}_run_quantization_gpu_${{ matrix.folders }}_test_reports"
|
|
|
| - name: "Test suite reports artifacts: ${{ env.machine_type }}_run_quantization_torch_gpu_${{ env.matrix_folders }}_test_reports"
|
| if: ${{ always() }}
|
| uses: actions/upload-artifact@v4
|
| with:
|
| name: ${{ env.machine_type }}_run_quantization_torch_gpu_${{ env.matrix_folders }}_test_reports
|
| path: /transformers/reports/${{ env.machine_type }}_run_quantization_torch_gpu_${{ matrix.folders }}_test_reports
|
|
|
| update_run_status:
|
| name: Update Check Run Status
|
| needs: [get-sha, create_run, run_models_gpu, run_quantization_torch_gpu]
|
| permissions:
|
| statuses: write
|
| if: ${{ always() && needs.create_run.result == 'success' }}
|
| runs-on: ubuntu-22.04
|
| env:
|
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
| GITHUB_RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
| STATUS_OK: ${{ contains(fromJSON('["skipped", "success"]'), needs.run_models_gpu.result) && contains(fromJSON('["skipped", "success"]'), needs.run_quantization_torch_gpu.result) }}
|
| steps:
|
| - name: Get `run_models_gpu` job status
|
| run: |
|
| echo "${{ needs.run_models_gpu.result }}"
|
| echo "${{ needs.run_quantization_torch_gpu.result }}"
|
| echo $STATUS_OK
|
| if [ "$STATUS_OK" = "true" ]; then
|
| echo "STATUS=success" >> $GITHUB_ENV
|
| else
|
| echo "STATUS=failure" >> $GITHUB_ENV
|
| fi
|
|
|
| - name: Update PR commit statuses
|
| run: |
|
| echo "${{ needs.run_models_gpu.result }}"
|
| echo "${{ env.STATUS }}"
|
| gh api \
|
| --method POST \
|
| -H "Accept: application/vnd.github+json" \
|
| -H "X-GitHub-Api-Version: 2022-11-28" \
|
| repos/${{ github.repository }}/statuses/${{ needs.get-sha.outputs.PR_HEAD_SHA }} \
|
| -f "target_url=$GITHUB_RUN_URL" -f "state=${{ env.STATUS }}" -f "description=Slow CI job" -f "context=pytest/custom-tests"
|
|
|