Unverified Commit 87927b24 authored by Yih-Dar's avatar Yih-Dar Committed by GitHub
Browse files

General PR slow CI (#30540)



* More general PR slow CI

* Update utils/pr_slow_ci_models.py
Co-authored-by: default avataramyeroberts <22614925+amyeroberts@users.noreply.github.com>

---------
Co-authored-by: default avatarydshieh <ydshieh@users.noreply.github.com>
Co-authored-by: default avataramyeroberts <22614925+amyeroberts@users.noreply.github.com>
parent b8ac4d03
...@@ -4,6 +4,11 @@ on: ...@@ -4,6 +4,11 @@ on:
pull_request: pull_request:
paths: paths:
- "src/transformers/models/*/modeling_*.py" - "src/transformers/models/*/modeling_*.py"
- "tests/models/*/test_*.py"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env: env:
HF_HOME: /mnt/cache HF_HOME: /mnt/cache
...@@ -20,31 +25,46 @@ env: ...@@ -20,31 +25,46 @@ env:
CUDA_VISIBLE_DEVICES: 0,1 CUDA_VISIBLE_DEVICES: 0,1
jobs: jobs:
check_for_new_model: find_models_to_run:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
name: Check if a PR is a new model PR name: Find models to run slow tests
# Triggered only if the required label `run-slow` is added
if: ${{ contains(github.event.pull_request.labels.*.name, 'run-slow') }}
outputs: outputs:
new_model: ${{ steps.check_new_model.outputs.new_model }} models: ${{ steps.models_to_run.outputs.models }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
fetch-depth: "0" fetch-depth: "0"
ref: ${{ github.event.pull_request.head.sha }}
- name: Get commit message
run: |
echo "commit_message=$(git show -s --format=%s)" >> $GITHUB_ENV
- name: Check if there is a new model - name: Get models to run slow tests
id: check_new_model
run: | run: |
echo "${{ env.commit_message }}"
python -m pip install GitPython python -m pip install GitPython
echo "new_model=$(python utils/check_if_new_model_added.py | tail -n 1)" >> $GITHUB_OUTPUT python utils/pr_slow_ci_models.py --commit_message "${{ env.commit_message }}" | tee output.txt
echo "models=$(tail -n 1 output.txt)" >> $GITHUB_ENV
- name: Models to run slow tests
id: models_to_run
run: |
echo "${{ env.models }}"
echo "models=${{ env.models }}" >> $GITHUB_OUTPUT
run_models_gpu: run_models_gpu:
name: Run all tests for the new model name: Run all tests for the model
# Triggered if it is a new model PR and the required label is added # Triggered only `find_models_to_run` is triggered (label `run-slow` is added) which gives the models to run
if: ${{ needs.check_for_new_model.outputs.new_model != '' && contains(github.event.pull_request.labels.*.name, 'single-model-run-slow') }} # (either a new model PR or via a commit message)
needs: check_for_new_model if: ${{ needs.find_models_to_run.outputs.models != '[]' }}
needs: find_models_to_run
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
folders: ["${{ needs.check_for_new_model.outputs.new_model }}"] folders: ${{ fromJson(needs.find_models_to_run.outputs.models) }}
machine_type: [single-gpu, multi-gpu] machine_type: [single-gpu, multi-gpu]
runs-on: ['${{ matrix.machine_type }}', nvidia-gpu, t4, ci] runs-on: ['${{ matrix.machine_type }}', nvidia-gpu, t4, ci]
container: container:
......
...@@ -13,15 +13,20 @@ ...@@ -13,15 +13,20 @@
# limitations under the License. # limitations under the License.
""" """
This script is used to get the directory of the modeling file that is added in a pull request (i.e. a new model PR). This script is used to get the models for which to run slow CI.
A new model added in a pull request will be included, as well as models specified in a commit message with a prefix
`[run-slow]`, `[run_slow]` or `[run slow]`. For example, the commit message `[run_slow]bert, gpt2` will give `bert` and
`gpt2`.
Usage: Usage:
```bash ```bash
python utils/check_if_new_model_added.py python utils/pr_slow_ci_models.py.py
``` ```
""" """
import argparse
import re import re
from pathlib import Path from pathlib import Path
from typing import List from typing import List
...@@ -82,7 +87,7 @@ def get_new_python_files() -> List[str]: ...@@ -82,7 +87,7 @@ def get_new_python_files() -> List[str]:
return get_new_python_files_between_commits(repo.head.commit, branching_commits) return get_new_python_files_between_commits(repo.head.commit, branching_commits)
if __name__ == "__main__": def get_new_model():
new_files = get_new_python_files() new_files = get_new_python_files()
reg = re.compile(r"src/transformers/(models/.*)/modeling_.*\.py") reg = re.compile(r"src/transformers/(models/.*)/modeling_.*\.py")
...@@ -93,4 +98,48 @@ if __name__ == "__main__": ...@@ -93,4 +98,48 @@ if __name__ == "__main__":
new_model = find_new_model[0] new_model = find_new_model[0]
# It's unlikely we have 2 new modeling files in a pull request. # It's unlikely we have 2 new modeling files in a pull request.
break break
print(new_model) return new_model
def parse_commit_message(commit_message: str) -> str:
"""
Parses the commit message to find the models specified in it to run slow CI.
Args:
commit_message (`str`): The commit message of the current commit.
Returns:
`str`: The substring in `commit_message` after `[run-slow]`, [run_slow]` or [run slow]`. If no such prefix is
found, the empty string is returned.
"""
if commit_message is None:
return ""
command_search = re.search(r"\[([^\]]*)\](.*)", commit_message)
if command_search is None:
return ""
command = command_search.groups()[0]
command = command.lower().replace("-", " ").replace("_", " ")
run_slow = command == "run slow"
if run_slow:
models = command_search.groups()[1].strip()
return models
else:
return ""
def get_models(commit_message: str):
models = parse_commit_message(commit_message)
return [f"models/{x}" for x in models.replace(",", " ").split()]
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--commit_message", type=str, default="", help="The commit message.")
args = parser.parse_args()
new_model = get_new_model()
specified_models = get_models(args.commit_message)
models = ([] if new_model == "" else [new_model]) + specified_models
print(models)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment