ClearML을 사용해 Ultralytics YOLOv5를 원격으로 학습하고 모니터링하기
ClearML을 사용해 원격 머신에서 실험을 추적하고, 데이터셋 버전을 관리하고, 하이퍼파라미터를 조정하며, Ultralytics YOLOv5 모델을 학습하는 방법을 알아보세요.
Nuvola Ladi6 분 읽기
Ultralytics는 YOLOv5와 같은 오픈 소스 도구를 모두가 무료로 사용할 수 있도록 연구 개발 자금을 마련하기 위해 다른 스타트업과 상업적으로 제휴합니다. 이 글에는 해당 파트너사로 연결되는 제휴 링크가 포함될 수 있습니다.
ClearML은 시간을 절약할 수 있도록 설계된 오픈 소스 툴박스를 제공하는 최신 파트너입니다.
ClearML은 머신러닝(ML) 도입을 가속화한다는 사명을 바탕으로, 모든 소프트웨어 또는 하드웨어 제품에 ML을 쉽게 통합할 수 있도록 합니다.
이 통합을 사용하면 YOLOv5 모델을 더욱 쉽게 학습하고 ClearML 실험 관리자를 통해 학습을 자동으로 추적할 수 있습니다. ClearML 데이터셋 버전 ID를 데이터 입력값으로 간단히 지정하면 모델 학습에 자동으로 사용됩니다.
실험 추적을 한 단계 더 발전시키세요#
- 실험 관리자에서 모든 YOLOv5 학습 실행을 추적하세요.
- 통합 ClearML 데이터 버전 관리 도구로 사용자 지정 학습 데이터를 버전 관리하고 손쉽게 액세스하세요.
- ClearML 하이퍼파라미터 최적화를 사용해 최상의 mAP를 얻으세요.
- ClearML Serving을 사용하면 몇 가지 명령어만으로 새로 학습한 YOLOv5 모델을 API로 전환할 수 있습니다.
이 도구를 얼마나 사용할지는 사용자가 선택할 수 있습니다. 실험 관리자만 사용하거나 모든 도구를 연결해 강력한 파이프라인을 구성할 수 있습니다.
설정하기#
실험과 데이터를 추적하려면 ClearML이 서버와 통신해야 합니다. ClearML Hosted Service에 무료로 가입하거나 자체 서버를 설정하는 두 가지 방법이 있습니다.
서버도 오픈 소스이므로 민감한 데이터를 다루더라도 문제가 없습니다!
- ClearML Python 패키지를 설치합니다:
pip install clearml - 자격 증명을 생성해 ClearML SDK를 서버에 연결합니다(오른쪽 상단에서 Settings → Workspace → Create new credentials로 이동). 그런 다음 아래 명령을 실행하고 안내를 따릅니다:
clearml-init
이제 시작할 준비가 되었습니다.
ClearML로 YOLOv5 학습하기#
ClearML 실험 추적을 활성화하려면 ClearML pip 패키지를 설치하면 됩니다.
pip install clearml이렇게 하면 YOLOv5 학습 스크립트와 통합됩니다. 이후 모든 학습 실행은 ClearML 실험 관리자에 캡처되어 저장됩니다. project_name 또는 task_name을 변경하려면 사용자 지정 로거로 이동해 값을 변경하세요: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache다음 항목이 캡처됩니다:
- 소스 코드 + 커밋되지 않은 변경 사항
- 설치된 패키지
- (하이퍼)파라미터
- 모델 파일(--save-period n을 사용하면 n 에포크마다 체크포인트를 저장합니다)
- 콘솔 출력
- 스칼라 값(mAP50, mAP50-95, 정밀도, 재현율, 손실, 학습률 등)
- 머신 세부 정보, 런타임, 생성 날짜 등의 일반 정보
- 레이블 상관도 및 혼동 행렬 등 생성된 모든 플롯
- 에포크별 바운딩 박스가 표시된 이미지
- 에포크별 모자이크
- 에포크별 검증 이미지
이제 ClearML UI에서 이 모든 정보를 시각화하여 학습 진행 상황을 한눈에 확인할 수 있습니다. 표 보기에 사용자 지정 열(예: mAP50)을 추가하면 성능이 가장 우수한 모델을 쉽게 기준으로 정렬할 수 있습니다. 여러 실험을 선택해 직접 비교할 수도 있습니다!
이 모든 정보를 활용해 하이퍼파라미터 최적화와 원격 실행 등 더 많은 작업을 할 수 있습니다. 방법을 알아보려면 계속 읽어 보세요!
데이터셋 버전 관리#
코드와 데이터를 별도로 버전 관리하는 것은 일반적으로 좋은 방법이며, 최신 버전을 쉽게 가져올 수 있게 해줍니다. 이 리포지토리에서는 데이터셋 버전 ID를 지정할 수 있으며, 해당 데이터가 아직 없으면 가져옵니다. 또한 이 워크플로는 사용된 데이터셋 ID를 작업 파라미터의 일부로 저장하므로 어떤 실험에 어떤 데이터가 사용되었는지 항상 확실히 알 수 있습니다!
데이터셋 준비#
YOLOv5 저장소는 데이터셋 정보를 포함하는 YAML 파일을 사용해 다양한 데이터셋을 지원합니다. 기본적으로 데이터셋은 저장소 루트 폴더를 기준으로 ../datasets 폴더에 다운로드됩니다. 따라서 YAML의 링크나 YOLOv5에서 제공하는 스크립트를 사용해 COCO128 데이터셋을 다운로드했다면 다음과 같은 폴더 구조가 생성됩니다.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt원하는 데이터셋이라면 무엇이든 사용할 수 있습니다. 이 폴더 구조만 유지하면 직접 만든 데이터셋을 사용해도 됩니다.
다음으로 해당 YAML 파일을 데이터셋 폴더의 루트에 복사합니다. 이 YAML 파일에는 ClearML이 데이터셋을 올바르게 사용하는 데 필요한 정보가 들어 있습니다. 물론 직접 파일을 만들 수도 있습니다. 예시 YAML 파일의 구조를 따르면 됩니다.
YAML 파일에는 다음 키가 필요합니다: path, train, test, val, nc, names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txt데이터셋 업로드#
이 데이터셋을 버전 관리되는 데이터셋으로 ClearML에 추가하려면 데이터셋 루트 폴더로 이동하여 다음 명령을 실행합니다.
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .clearml-data sync 명령은 실제로 단축 명령입니다. 다음 명령을 차례로 실행해도 됩니다.
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeClearML 데이터셋을 사용한 학습 실행#
ClearML 데이터셋을 만들었으면 이를 사용해 사용자 지정 YOLOv5 모델을 학습할 수 있습니다.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache하이퍼파라미터 최적화#
실험과 데이터 버전이 준비되었으니, 이를 바탕으로 무엇을 할 수 있는지 살펴보겠습니다!
코드 정보, 설치된 패키지, 환경 세부 정보를 사용하면 이제 실험 전체를 완전히 재현할 수 있습니다. ClearML을 사용하면 실험을 복제하고 매개변수도 변경할 수 있습니다. 그런 다음 새 매개변수로 실험을 자동으로 다시 실행할 수 있으며, 이것이 바로 HPO의 기본 개념입니다.
하이퍼파라미터 최적화를 로컬에서 실행할 수 있도록 미리 작성된 스크립트를 제공했습니다. 먼저 학습 작업을 한 번 이상 실행해 ClearML 실험 관리자에 등록해 두세요. 스크립트가 해당 작업을 복제하고 하이퍼파라미터를 변경합니다.
스크립트의 utils/loggers/clearml/hpo.py에 템플릿 작업의 ID를 입력한 다음 실행하면 됩니다. task.execute_locally()을 task.execute()로 변경하면 작업을 ClearML 큐에 넣어 원격 에이전트가 대신 실행하도록 할 수 있습니다.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py원격 실행(고급)#
HPO를 로컬에서 실행하면 매우 편리하지만, 원격 머신에서 실험을 실행하려면 어떻게 해야 할까요? 사내의 강력한 GPU 머신에 접근할 수 있거나 클라우드 GPU를 사용할 예산이 있을 수도 있습니다. 이럴 때 ClearML Agent가 유용합니다.
에이전트가 할 수 있는 작업은 여기에서 확인하세요.
간단히 말해, 실험 관리자가 추적하는 모든 실험에는 다른 머신에서 실험을 재현하기에 충분한 정보(설치된 패키지, 커밋되지 않은 변경 사항 등)가 포함되어 있습니다. 따라서 ClearML 에이전트는 큐에서 새 작업을 기다리다가 작업을 발견하면 환경을 다시 만들고 실행하며, 스칼라와 플롯 등을 실험 관리자에 계속 보고합니다.
다음 명령을 실행하기만 하면 클라우드 VM, 로컬 GPU 머신, 개인 노트북 등 어떤 머신이든 ClearML 에이전트로 전환할 수 있습니다.
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]복제, 편집 및 큐 등록#
에이전트가 실행 중이므로 작업을 할당할 수 있습니다. HPO 섹션에서 작업을 복제하고 하이퍼파라미터를 편집할 수 있다고 설명했습니다. 인터페이스에서도 같은 작업을 할 수 있습니다!
- 실험을 마우스 오른쪽 버튼으로 클릭해 복제합니다.
- 원하는 값으로 하이퍼파라미터를 수정합니다.
- 작업을 마우스 오른쪽 버튼으로 클릭해 원하는 대기열에 추가합니다.
작업 원격 실행#
위에서 설명한 대로 작업을 복제하거나, 현재 스크립트에 task.execute_remotely()을 추가해 표시할 수 있습니다. 그러면 실행 시 작업이 큐에 등록되어 에이전트가 처리합니다!
YOLOv5 학습 스크립트를 원격으로 실행하려면 ClearML 로거를 초기화한 후 train.py 스크립트에 다음 줄을 추가하기만 하면 됩니다.
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # 로거 인스턴스
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ 이 줄을 추가합니다궁금한 점이 있으신가요? 커뮤니티에 참여해 오늘 질문을 남겨 주세요!
작성자
댓글
질문하거나 결과를 공유하거나 다른 사람을 도와주세요.










