| | name: Slow tests on important models (on Push - A10) |
| |
|
| | on: |
| | push: |
| | branches: [ main ] |
| |
|
| | jobs: |
| | get_modified_models: |
| | name: "Get all modified files" |
| | runs-on: ubuntu-latest |
| | outputs: |
| | matrix: ${{ steps.set-matrix.outputs.matrix }} |
| | steps: |
| | - name: Check out code |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Get changed files using `actions/github-script` |
| | id: get-changed-files |
| | uses: actions/github-script@v7 |
| | with: |
| | script: | |
| | let files = []; |
| | |
| | // Only handle push events |
| | if (context.eventName === 'push') { |
| | const afterSha = context.payload.after; |
| | const branchName = context.payload.ref.replace('refs/heads/', ''); |
| | |
| | let baseSha; |
| | |
| | if (branchName === 'main') { |
| | console.log('Push to main branch, comparing to parent commit'); |
| | // Get the parent commit of the pushed commit |
| | const { data: commit } = await github.rest.repos.getCommit({ |
| | owner: context.repo.owner, |
| | repo: context.repo.repo, |
| | ref: afterSha |
| | }); |
| | baseSha = commit.parents[0]?.sha; |
| | if (!baseSha) { |
| | throw new Error('No parent commit found for the pushed commit'); |
| | } |
| | } else { |
| | console.log(`Push to branch ${branchName}, comparing to main`); |
| | baseSha = 'main'; |
| | } |
| | |
| | const { data: comparison } = await github.rest.repos.compareCommits({ |
| | owner: context.repo.owner, |
| | repo: context.repo.repo, |
| | base: baseSha, |
| | head: afterSha |
| | }); |
| | |
| | // Include added, modified, and renamed files |
| | files = comparison.files |
| | .filter(file => file.status === 'added' || file.status === 'modified' || file.status === 'renamed') |
| | .map(file => file.filename); |
| | } |
| | |
| | // Include all files under src/transformers/ (not just models subdirectory) |
| | const filteredFiles = files.filter(file => |
| | file.startsWith('src/transformers/') |
| | ); |
| | |
| | core.setOutput('changed_files', filteredFiles.join(' ')); |
| | core.setOutput('any_changed', filteredFiles.length > 0 ? 'true' : 'false'); |
| |
|
| | - name: Parse changed files with Python |
| | if: steps.get-changed-files.outputs.any_changed == 'true' |
| | env: |
| | CHANGED_FILES: ${{ steps.get-changed-files.outputs.changed_files }} |
| | id: set-matrix |
| | run: | |
| | python3 - << 'EOF' |
| | import os |
| | import sys |
| | import json |
| | |
| | |
| | sys.path.insert(0, 'utils') |
| | |
| | |
| | from important_files import IMPORTANT_MODELS |
| | |
| | print(f"Important models: {IMPORTANT_MODELS}") |
| | |
| | # Get the changed files from the previous step |
| | changed_files_str = os.environ.get('CHANGED_FILES', '') |
| | changed_files = changed_files_str.split() if changed_files_str else [] |
| | |
| | # Filter to only Python files |
| | python_files = [f for f in changed_files if f.endswith('.py')] |
| | print(f"Python files changed: {python_files}") |
| | |
| | result_models = set() |
| | |
| | # Specific files that trigger all models |
| | transformers_utils_files = [ |
| | 'modeling_utils.py', |
| | 'modeling_rope_utils.py', |
| | 'modeling_flash_attention_utils.py', |
| | 'modeling_attn_mask_utils.py', |
| | 'cache_utils.py', |
| | 'masking_utils.py', |
| | 'pytorch_utils.py' |
| | ] |
| | |
| | # Single loop through all Python files |
| | for file in python_files: |
| | # Check for files under src/transformers/models/ |
| | if file.startswith('src/transformers/models/'): |
| | remaining_path = file[len('src/transformers/models/'):] |
| | if '/' in remaining_path: |
| | model_dir = remaining_path.split('/')[0] |
| | if model_dir in IMPORTANT_MODELS: |
| | result_models.add(model_dir) |
| | print(f"Added model directory: {model_dir}") |
| | |
| | # Check for specific files under src/transformers/ or src/transformers/generation/ files |
| | elif file.startswith('src/transformers/generation/') or \ |
| | (file.startswith('src/transformers/') and os.path.basename(file) in transformers_utils_files): |
| | print(f"Found core file: {file} - including all important models") |
| | result_models.update(IMPORTANT_MODELS) |
| | break |
| | |
| | |
| | result_list = sorted(list(result_models)) |
| | print(f"Final model list: {result_list}") |
| | |
| | if result_list: |
| | matrix_json = json.dumps(result_list) |
| | print(f"matrix={matrix_json}") |
| | |
| | |
| | with open(os.environ['GITHUB_OUTPUT'], 'a') as f: |
| | f.write(f"matrix={matrix_json}\n") |
| | else: |
| | print("matrix=[]") |
| | with open(os.environ['GITHUB_OUTPUT'], 'a') as f: |
| | f.write("matrix=[]\n") |
| | EOF |
| |
|
| | model-ci: |
| | name: Model CI |
| | uses: ./.github/workflows/self-scheduled.yml |
| | needs: get_modified_models |
| | if: needs.get_modified_models.outputs.matrix != '' && needs.get_modified_models.outputs.matrix != '[]' |
| | with: |
| | job: run_models_gpu |
| | slack_report_channel: "#transformers-ci-push" |
| | docker: huggingface/transformers-all-latest-gpu:flash-attn |
| | ci_event: push |
| | report_repo_id: hf-internal-testing/transformers_ci_push |
| | commit_sha: ${{ github.sha }} |
| | subdirs: ${{ needs.get_modified_models.outputs.matrix }} |
| | secrets: inherit |
| |
|