@@ -375,25 +375,28 @@ jobs:
375375 fail-fast : false
376376 matrix :
377377 model : [googlenet, densenet, resnet, yolo]
378- parallel_flag : ["--parallel tbb 1000", "--parallel tbb 10000"]
379378 include :
380379 - model : googlenet
381380 parser : parser_onnx.py
382381 model_file : GoogLeNet.onnx
383382 model_path : docs/models/GoogLeNet.onnx
384383 model_url : ' '
384+ extra_args : " 32"
385385 - model : densenet
386386 parser : parser_onnx.py
387387 model_file : densenet121_Opset16.onnx
388388 model_url : https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/densenet121_Opset16_timm/densenet121_Opset16.onnx?download=
389+ extra_args : " 32"
389390 - model : resnet
390391 parser : parser_onnx.py
391392 model_file : resnest101e_Opset16.onnx
392393 model_url : https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/resnest101e_Opset16_timm/resnest101e_Opset16.onnx?download=
394+ extra_args : " 32"
393395 - model : yolo
394396 parser : parser_onnx.py
395397 model_file : yolo11x-cls.pt
396398 model_url : https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11x-cls.pt
399+ extra_args : " 32"
397400
398401 steps :
399402 - uses : actions/checkout@v4
@@ -479,72 +482,152 @@ jobs:
479482
480483 - name : Run evaluation
481484 run : |
485+ DATASET_PATH="docs/ImageNet/test"
482486 MODEL="${{ matrix.model }}"
483- EXTRA_ARGS="${{ matrix.parallel_flag }}"
487+ EXTRA_ARGS="${{ matrix.extra_args }}"
484488
485- echo "Запуск оценки для модели $MODEL с флагами : $EXTRA_ARGS"
489+ echo "Запуск оценки для модели $MODEL"
490+ echo "Команда : ${{ steps.set_eval_binary.outputs.EVAL_BINARY }} --model $MODEL $EXTRA_ARGS"
486491
492+ echo "Системная информация до запуска:"
493+ echo "--- Память ---"
494+ free -h
495+ echo "--- CPU ---"
496+ top -bn1 | head -5
497+ echo "--- Диск ---"
498+ df -h docs/ImageNet/test/
499+
500+ TIMESTAMP=$(date +%s)
501+ MONITOR_LOG="monitor_$MODEL.log"
502+
503+ monitor_process() {
504+ local pid=$1
505+ local log_file=$2
506+
507+ echo "Мониторинг процесса $pid..."
508+
509+ while kill -0 $pid 2>/dev/null; do
510+ NOW=$(date '+%H:%M:%S')
511+
512+ MEM=$(ps -o rss= -p $pid 2>/dev/null | awk '{print $1/1024 " MB"}' || echo "N/A")
513+
514+ CPU=$(ps -o pcpu= -p $pid 2>/dev/null || echo "N/A")
515+
516+ TOTAL_MEM=$(free -m | awk 'NR==2{print $3 " MB / " $2 " MB"}')
517+
518+ echo "[$NOW] PID : $pid | MEM: $MEM | CPU: $CPU% | System MEM: $TOTAL_MEM" >> $log_file
519+
520+ sleep 2
521+ done
522+
523+ echo "Процесс $pid завершен" >> $log_file
524+ }
525+
526+ echo "Запуск ACC в фоновом режиме..."
487527 " ${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" \
488528 --model $MODEL \
489- $EXTRA_ARGS > accuracy_${MODEL}_${EXTRA_ARGS// /_}.txt 2>&1
529+ $EXTRA_ARGS > accuracy_$MODEL.txt 2>&1 &
530+ ACC_PID=$!
490531
491- if [ $? -ne 0 ]; then
492- echo "Ошибка при оценке модели $MODEL с флагами : $EXTRA_ARGS"
493- cat accuracy_${MODEL}_${EXTRA_ARGS// /_}.txt
494- exit 1
532+ echo "PID процесса : $ACC_PID"
533+
534+ monitor_process $ACC_PID $MONITOR_LOG &
535+ MONITOR_PID=$!
536+
537+ wait $ACC_PID
538+ EXIT_CODE=$?
539+
540+ kill $MONITOR_PID 2>/dev/null || true
541+
542+ echo "Результаты мониторинга:"
543+ if [ -f "$MONITOR_LOG" ]; then
544+ cat "$MONITOR_LOG"
545+ else
546+ echo "Лог мониторинга не создан"
495547 fi
496548
497- echo "Результат оценки:"
498- cat accuracy_${MODEL}_${EXTRA_ARGS// /_}.txt
549+ echo "Системная информация после запуска:"
550+ free -h
551+
552+ echo "Код завершения : $EXIT_CODE"
553+
554+ if [ $EXIT_CODE -eq 143 ]; then
555+ echo "Ошибка 143 (SIGTERM) - процесс убит системой"
556+
557+ if sudo dmesg | tail -20 | grep -i "killed process" | grep -q "$ACC_PID"; then
558+ echo "Подтверждено : процесс убит OOM Killer"
559+ sudo dmesg | tail -20 | grep -i "killed process" | tail -5
560+ else
561+ echo "Не найдено подтверждение OOM Killer в логах"
562+ sudo dmesg | tail -20
563+ fi
564+
565+ elif [ $EXIT_CODE -ne 0 ]; then
566+ echo "Ошибка при оценке модели $MODEL (код : $EXIT_CODE)"
567+ else
568+ echo "Оценка успешно завершена"
569+ fi
570+
571+ echo "Лог ACC:"
572+ if [ -f "accuracy_$MODEL.txt" ]; then
573+ cat "accuracy_$MODEL.txt"
574+ else
575+ echo "Файл лога не создан"
576+ fi
577+
578+ # Выход с ошибкой если нужно
579+ if [ $EXIT_CODE -ne 0 ]; then
580+ exit $EXIT_CODE
581+ fi
499582
500583 - name : Extract accuracy value
501584 run : |
502- ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}_${EXTRA_ARGS// /_} .txt | head -1 || echo "0%")
503- echo "$ACCURACY" > accuracy_value_${{ matrix.model }}_${EXTRA_ARGS// /_} .txt
504- echo "Accuracy for ${{ matrix.model }} (${{ matrix.parallel_flag }}) : $ACCURACY"
585+ ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | head -1 || echo "0%")
586+ echo "$ACCURACY" > accuracy_value_${{ matrix.model }}.txt
587+ echo "Accuracy for ${{ matrix.model }}: $ACCURACY"
505588
506589 - name : Upload accuracy artifacts
507590 uses : actions/upload-artifact@v4
508591 with :
509- name : accuracy-${{ matrix.model }}-${{ matrix.parallel_flag }}
592+ name : accuracy-${{ matrix.model }}
510593 path : |
511- accuracy_${{ matrix.model }}_${EXTRA_ARGS// /_} .txt
512- accuracy_value_${{ matrix.model }}_${EXTRA_ARGS// /_} .txt
594+ accuracy_${{ matrix.model }}.txt
595+ accuracy_value_${{ matrix.model }}.txt
513596
514- # Дополнительная проверка для GoogLeNet с флагом --onednn 1000
515- - name : Run evaluation for GoogLeNet with --onednn 1000
516- if : matrix.model == 'googlenet'
597+ - name : Update README for model (master only)
598+ if : github.ref == 'refs/heads/master'
517599 run : |
518- MODEL="${{ matrix.model }}"
519- EXTRA_ARGS="--onednn 1000"
600+ TOP1_ACC=$(grep -oE 'Top-1 Accuracy: [0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | grep -oE '[0-9]+\.?[0-9]*')
601+ TOP5_ACC=$(grep -oE 'Top-5 Accuracy: [0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | grep -oE '[0-9]+\.?[0-9]*')
602+ DATE=$(date '+%Y-%m-%d')
520603
521- echo "Запуск оценки для модели $MODEL с флагами : $EXTRA_ARGS"
604+ if [ -z "$TOP1_ACC" ] || [ -z "$TOP5_ACC" ]; then
605+ echo "Ошибка : Не удалось извлечь точность из файла accuracy_${{ matrix.model }}.txt"
606+ cat accuracy_${{ matrix.model }}.txt
607+ exit 1
608+ fi
522609
523- " ${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" \
524- --model $MODEL \
525- $EXTRA_ARGS > accuracy_${MODEL}_onednn_1000.txt 2>&1
610+ UPDATE_TEXT="<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->Accuracy : Top-1: ${TOP1_ACC}% | Top-5: ${TOP5_ACC}% (updated: ${DATE})<!--END_ACCURACY_${{ matrix.model }}-->"
526611
527- if [ $? -ne 0 ]; then
528- echo "Ошибка при оценке модели $MODEL с флагами : $EXTRA_ARGS"
529- cat accuracy_${MODEL}_onednn_1000.txt
612+ if grep -q "<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->" README.md; then
613+ sed -i "s|<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->.*<!--END_ACCURACY_${{ matrix.model }}-->|${UPDATE_TEXT}|" README.md
614+ echo "Обновлена точность для ${{ matrix.model }} в README"
615+ else
616+ echo "Ошибка : Плейсхолдер <!--ACCURACY_${{ matrix.model }}_PLACEHOLDER--> не найден в README.md"
617+ echo "Содержимое README.md:"
618+ cat README.md
530619 exit 1
531620 fi
532-
533- echo "Результат оценки:"
534- cat accuracy_${MODEL}_onednn_1000.txt
535621
536- - name : Extract accuracy value for GoogLeNet with --onednn 1000
537- if : matrix.model == 'googlenet '
622+ - name : Commit and push changes (main only)
623+ if : github.ref == 'refs/heads/main '
538624 run : |
539- ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}_onednn_1000.txt | head -1 || echo "0%")
540- echo "$ACCURACY" > accuracy_value_${{ matrix.model }}_onednn_1000.txt
541- echo "Accuracy for ${{ matrix.model }} (--onednn 1000): $ACCURACY"
542-
543- - name : Upload accuracy artifacts for GoogLeNet with --onednn 1000
544- if : matrix.model == 'googlenet'
545- uses : actions/upload-artifact@v4
546- with :
547- name : accuracy-${{ matrix.model }}-onednn-1000
548- path : |
549- accuracy_${{ matrix.model }}_onednn_1000.txt
550- accuracy_value_${{ matrix.model }}_onednn_1000.txt
625+ git config --global user.name "GitHub Actions"
626+ git config --global user.email "actions@github.com"
627+ git add README.md
628+ if git diff-index --quiet HEAD --; then
629+ echo "No changes to commit"
630+ else
631+ git commit -m "[CI] Update accuracy for ${{ matrix.model }}: $(cat accuracy_value_${{ matrix.model }}.txt)"
632+ git push origin master
633+ fi
0 commit comments