-
Notifications
You must be signed in to change notification settings - Fork 858
218 lines (210 loc) · 11.1 KB
/
Copy pathpr-run-test.yml
File metadata and controls
218 lines (210 loc) · 11.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
name: pr_run_test
on:
pull_request:
paths-ignore:
- 'README.md'
- 'README_zh-CN.md'
- 'docs/**'
- 'configs/**'
- 'tools/**'
workflow_dispatch:
schedule:
- cron: '56 22 * * *'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CONDA_ENV: pr_regression
HF_DATASETS_OFFLINE: 1
HF_EVALUATE_OFFLINE: 1
TRANSFORMERS_OFFLINE: 1
VLLM_USE_MODELSCOPE: false
LMDEPLOY_USE_MODELSCOPE: false
HF_HUB_OFFLINE: 1
CONDA_PATH: /mnt/shared-storage-user/opencompass-shared/qa-llm-cicd/miniconda3
REPORT_ROOT: /mnt/shared-storage-user/opencompass-shared/qa-llm-cicd/eval_report/prtest
BASELINE_DIR: mock-api-baseline
COMPASS_DATA_CACHE: /mnt/shared-storage-user/auto-eval-pipeline/opencompass/llmeval/compass_data_cache
HF_DATASETS_CACHE: /mnt/shared-storage-user/opencompass-shared/qa-llm-cicd/hf_cache
HF_HUB_CACHE: /mnt/shared-storage-gpfs2/gpfs2-shared-public/huggingface/hub
KUBEBRAIN_CLUSTER_ENTRY: https://h.pjlab.org.cn
# Must match rjob --namespace below (used by submit/get/logs/stop).
KUBEBRAIN_NAMESPACE: ailab-llmeval
SCORE_MIN: '75'
SCORE_MAX: '80'
jobs:
cmd_test:
runs-on: yidian_cu12
timeout-minutes: 45
env:
JOB_NAME: pr-test-${{ github.run_id }}-cmd-${{ github.run_attempt }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Prepare - Install opencompass
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
python3 -m pip uninstall opencompass -y
python3 -m pip install .[full]
conda info --envs
pip list
lmdeploy check_env
- name: Run test
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
pip list
NS=${{ env.KUBEBRAIN_NAMESPACE }}
rjob submit --metadata-name=${{ env.JOB_NAME }} --charged-group=llmeval_gpu --private-machine=group --group=llmeval_gpu --namespace=${NS} --gpu=2 --cpu=32 --memory=32568 --private-machine=group --image=registry.h.pjlab.org.cn/ailab-puyu/xpuyu:torch-2.6.0-45d96d5f-0607 --env=COMPASS_DATA_CACHE=/mnt/shared-storage-user/auto-eval-pipeline/opencompass/llmeval/compass_data_cache --env=TIKTOKEN_CACHE_DIR=/mnt/shared-storage-user/auto-eval-pipeline/opencompass/llmeval/share_tiktoken --env=HF_ENDPOINT=https://hf-mirror.com --env=HF_DATASETS_CACHE=${{env.HF_DATASETS_CACHE}} --env=HF_HUB_CACHE=/mnt/shared-storage-user/large-model-center-share-weights/hf_hub --env=CUDA_MODULE_LOADING=EAGER --env=HF_DATASETS_OFFLINE=1 --env=TRANSFORMERS_OFFLINE=1 --env=HF_EVALUATE_OFFLINE=1 --env=HF_HUB_OFFLINE=1 --mount=gpfs://gpfs1/qa-llm-cicd:/mnt/shared-storage-user/qa-llm-cicd --mount=gpfs://gpfs1/opencompass-shared:/mnt/shared-storage-user/opencompass-shared --mount=gpfs://gpfs1/auto-eval-pipeline:/mnt/shared-storage-user/auto-eval-pipeline --mount=gpfs://gpfs1/large-model-center-share-weights:/mnt/shared-storage-user/large-model-center-share-weights -- bash -exc 'OUT="${{env.REPORT_ROOT}}/${{ github.run_id }}"; set +e; /mnt/shared-storage-user/opencompass-shared/qa-llm-cicd/pr_test_new.sh "$OUT"; status=$?; chmod -R a+rwX "$OUT" 2>/dev/null || true; exit $status'
for i in {1..300}; do
current_status=$(rjob get --namespace=${NS} ${{ env.JOB_NAME }} | grep -oP 'rjob [^:]+: \K[^ ]+' || true)
if [[ $current_status == "Succeeded" ]]; then
echo "Task succeeded"
rjob logs job --namespace=${NS} ${{ env.JOB_NAME }} -n 100
exit 0
elif [[ $current_status == "Failed" || $current_status == "Stopped" ]]; then
echo "Task failed or stopped, fetching logs"
rjob logs job --namespace=${NS} ${{ env.JOB_NAME }} -n 100
exit 1
fi
sleep 6
done
echo "Timed out waiting for rjob ${{ env.JOB_NAME }} (last status=${current_status:-unknown})"
rjob logs job --namespace=${NS} ${{ env.JOB_NAME }} -n 100 || true
exit 1
- name: Get result
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
python autotest/utils/check_cmd_scores.py \
"${{env.REPORT_ROOT}}/${{ github.run_id }}" \
--min "${{env.SCORE_MIN}}" \
--max "${{env.SCORE_MAX}}"
- name: Cleanup output on success
run: |
# Only delete this job's outputs; keep sibling mock_api_test dirs under the same run_id.
RUN_DIR="${{env.REPORT_ROOT}}/${{ github.run_id }}"
for d in "$RUN_DIR"/regression_result{1,2,3}; do
if [[ -d "$d" ]]; then
echo "Removing successful cmd output: $d"
rm -rf "$d"
fi
done
rmdir "$RUN_DIR" 2>/dev/null || true
- name: Uninstall opencompass
if: always()
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
python3 -m pip uninstall opencompass -y
conda info --envs
rjob stop --namespace=${{ env.KUBEBRAIN_NAMESPACE }} ${{ env.JOB_NAME }}
mock_api_test:
runs-on: yidian_cu12
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
include:
- func_type: chat_obj_fullbench_v1
name: chat-v1
memory: 32568
cpu: 16
- func_type: chat_obj_fullbench_v2
name: chat-v2
memory: 32568
cpu: 16
- func_type: chat_sub_fullbench
name: chat-sub
# memory: 3072
memory: 32568
cpu: 2
- func_type: chat_longtext_fullbench
name: chat-longtext
memory: 65136
cpu: 16
env:
JOB_NAME: pr-test-${{ github.run_id }}-api-${{ matrix.name }}-${{ github.run_attempt }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Prepare - Install opencompass
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
python3 -m pip uninstall opencompass -y
python3 -m pip install .[full]
conda info --envs
pip list
lmdeploy check_env
- name: Run test
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
pip list
NS=${{ env.KUBEBRAIN_NAMESPACE }}
rjob submit --metadata-name=${{ env.JOB_NAME }} --charged-group=llmeval_gpu --private-machine=group --group=llmeval_gpu --namespace=${NS} --gpu=0 --cpu=${{ matrix.cpu }} --memory=${{ matrix.memory }} --private-machine=group --image=registry.h.pjlab.org.cn/ailab-puyu-puyu_gpu/lmdeploy:v0.12.0-cu12.8 --env=COMPASS_DATA_CACHE=/mnt/shared-storage-user/auto-eval-pipeline/opencompass/llmeval/compass_data_cache --env=TIKTOKEN_CACHE_DIR=/mnt/shared-storage-user/auto-eval-pipeline/opencompass/llmeval/share_tiktoken --env=HF_ENDPOINT=https://hf-mirror.com --env=HF_DATASETS_CACHE=${{env.HF_DATASETS_CACHE}} --env=HF_HUB_CACHE=/mnt/shared-storage-gpfs2/gpfs2-shared-public/huggingface/hub --env=CUDA_MODULE_LOADING=EAGER --env=HF_DATASETS_OFFLINE=1 --env=TRANSFORMERS_OFFLINE=1 --env=HF_EVALUATE_OFFLINE=1 --env=HF_HUB_OFFLINE=1 --env=REPORT_DIR=${{env.REPORT_ROOT}} --env=CHAT_TYPE=${{matrix.func_type}} --mount=gpfs://gpfs1/qa-llm-cicd:/mnt/shared-storage-user/qa-llm-cicd --mount=gpfs://gpfs1/opencompass-shared:/mnt/shared-storage-user/opencompass-shared --mount=gpfs://gpfs1/auto-eval-pipeline:/mnt/shared-storage-user/auto-eval-pipeline --mount=gpfs://gpfs2/gpfs2-shared-public:/mnt/shared-storage-gpfs2/gpfs2-shared-public -- bash -exc 'source ${{env.CONDA_PATH}}/bin/activate; conda activate ${{env.CONDA_ENV}}; conda env list; cd ${{github.workspace}}; ln -s /mnt/shared-storage-user/auto-eval-pipeline/opencompass/llmeval/compass_data_cache/data .; python /mnt/shared-storage-user/opencompass-shared/qa-llm-cicd/mock_chat_api.py --type winrate --port 26333 > mock_${{matrix.name}}.log 2>&1 & sleep 3; OUT="${{env.REPORT_ROOT}}/${{ github.run_id }}/${{matrix.func_type}}"; set +e; opencompass autotest/all/${{matrix.func_type}}.py --work-dir "$OUT" --reuse; status=$?; chmod -R a+rwX "$OUT" 2>/dev/null || true; exit $status'
for i in {1..300}; do
current_status=$(rjob get --namespace=${NS} ${{ env.JOB_NAME }} | grep -oP 'rjob [^:]+: \K[^ ]+' || true)
if [[ $current_status == "Succeeded" ]]; then
echo "Task succeeded"
rjob logs job --namespace=${NS} ${{ env.JOB_NAME }} -n 100
exit 0
elif [[ $current_status == "Failed" || $current_status == "Stopped" ]]; then
echo "Task failed or stopped, fetching logs"
rjob logs job --namespace=${NS} ${{ env.JOB_NAME }} -n 100
exit 1
fi
sleep 6
done
echo "Timed out waiting for rjob ${{ env.JOB_NAME }} (last status=${current_status:-unknown})"
rjob logs job --namespace=${NS} ${{ env.JOB_NAME }} -n 100 || true
exit 1
- name: Compare predictions with baseline
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
CURRENT="${{env.REPORT_ROOT}}/${{ github.run_id }}/${{matrix.func_type}}"
BASELINE="${{env.REPORT_ROOT}}/${{env.BASELINE_DIR}}/${{matrix.func_type}}"
echo "Current run: $CURRENT"
echo "Baseline: $BASELINE"
if [[ ! -d "$CURRENT" ]]; then
echo "Current run output not found: $CURRENT"
exit 1
fi
if [[ ! -d "$BASELINE" ]]; then
echo "Baseline not found: $BASELINE"
echo "Upload golden predictions to REPORT_ROOT/BASELINE_DIR/<func_type> on shared storage."
exit 1
fi
python autotest/utils/compare_results.py compare_results \
"$CURRENT" "$BASELINE" predictions
python autotest/utils/compare_results.py compare_results \
"$CURRENT" "$BASELINE" results
python autotest/utils/compare_results.py compare_results \
"$CURRENT" "$BASELINE" summary
- name: Cleanup output on success
run: |
CURRENT="${{env.REPORT_ROOT}}/${{ github.run_id }}/${{matrix.func_type}}"
BASELINE_ROOT="${{env.REPORT_ROOT}}/${{env.BASELINE_DIR}}"
# Safety: never touch golden baseline.
if [[ "$CURRENT" == "$BASELINE_ROOT" || "$CURRENT" == "$BASELINE_ROOT"/* ]]; then
echo "Refusing to delete baseline path: $CURRENT"
exit 1
fi
if [[ -d "$CURRENT" ]]; then
echo "Removing successful mock output: $CURRENT"
rm -rf "$CURRENT"
else
echo "No output dir to remove: $CURRENT"
fi
rmdir "${{env.REPORT_ROOT}}/${{ github.run_id }}" 2>/dev/null || true
- name: Uninstall opencompass
if: always()
run: |
. ${{env.CONDA_PATH}}/bin/activate
conda activate ${{env.CONDA_ENV}}
python3 -m pip uninstall opencompass -y
conda info --envs
rjob stop --namespace=${{ env.KUBEBRAIN_NAMESPACE }} ${{ env.JOB_NAME }}