e06fe8e8c6
Self-hosted runner (benchmark) / Benchmark (aws-g5-4xlarge-cache) (push) Waiting to run
New model PR merged notification / Notify new model (push) Waiting to run
Update Transformers metadata / build_and_package (push) Waiting to run
Secret Leaks / trufflehog (push) Failing after 1s
Build documentation / build (push) Failing after 1s
Build documentation / build_other_lang (push) Failing after 0s
CodeQL Security Analysis / CodeQL Analysis (push) Failing after 0s
PR CI / pr-ci (push) Failing after 1s
Slow tests on important models (on Push - A10) / Get all modified files (push) Failing after 1s
Slow tests on important models (on Push - A10) / Model CI (push) Has been skipped
163 lines
6.3 KiB
YAML
163 lines
6.3 KiB
YAML
name: Slow tests on important models (on Push - A10)
|
|
|
|
on:
|
|
push:
|
|
branches: [ main ]
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Get changed files using `actions/github-script`
|
|
id: get-changed-files
|
|
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
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
|
|
|
|
# Add the utils directory to Python path
|
|
sys.path.insert(0, 'utils')
|
|
|
|
# Import the important models list
|
|
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 # No need to continue once we include all models
|
|
|
|
# Convert to sorted list and create matrix
|
|
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}")
|
|
|
|
# Write to GITHUB_OUTPUT
|
|
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
|