Tích hợp ClearML
Giới thiệu về ClearML
ClearML là một nền tảng MLOps mã nguồn mở được thiết kế để hợp lý hóa quy trình làm việc máy học của bạn và giúp bạn tiết kiệm thời gian ⏱️.
🔨 Theo dõi mọi lần chạy huấn luyện YOLOv5 trong trình quản lý thử nghiệm
🔧 Quản lý phiên bản và dễ dàng truy cập dữ liệu huấn luyện tùy chỉnh của bạn bằng Công cụ quản lý phiên bản dữ liệu ClearML tích hợp
🔦 Huấn luyện và giám sát từ xa các lần chạy huấn luyện YOLOv5 của bạn bằng ClearML Agent
🔬 Nhận mAP tốt nhất bằng cách sử dụng Tối ưu hóa siêu tham số ClearML
🔭 Biến mô hình YOLOv5 mới được huấn luyện của bạn thành một API chỉ với một vài lệnh bằng ClearML Serving
Và còn nhiều hơn thế nữa. Bạn có thể tùy ý sử dụng bao nhiêu công cụ tùy thích, bạn có thể chỉ cần dùng trình quản lý thử nghiệm hoặc xâu chuỗi tất cả chúng lại với nhau thành một quy trình ấn tượng!
🦾 Thiết lập mọi thứ
Để theo dõi các thí nghiệm và/hoặc dữ liệu của bạn, ClearML cần giao tiếp với một máy chủ. Bạn có 2 lựa chọn để có được một máy chủ:
Đăng ký miễn phí Dịch vụ được lưu trữ ClearML hoặc bạn có thể thiết lập máy chủ ClearML của riêng mình. Ngay cả máy chủ cũng là mã nguồn mở, vì vậy ngay cả khi bạn đang xử lý dữ liệu nhạy cảm, bạn vẫn có thể yên tâm!
-
Cài đặt
clearml
gói python:pip install clearml
-
Kết nối ClearML SDK với máy chủ bằng cách tạo thông tin đăng nhập (đi đến phía trên bên phải vào Settings -> Workspace -> Create new credentials), sau đó thực thi lệnh bên dưới và làm theo hướng dẫn:
clearml-init
Vậy là xong! Bạn đã hoàn thành 😎
🚀 Huấn luyện YOLOv5 với ClearML
Để bật tính năng theo dõi thử nghiệm ClearML, chỉ cần cài đặt gói ClearML pip.
pip install clearml
Điều này sẽ cho phép tích hợp với tập lệnh huấn luyện YOLOv5. Mọi lần chạy huấn luyện từ bây giờ sẽ được ghi lại và lưu trữ bởi trình quản lý thử nghiệm ClearML.
Nếu bạn muốn thay đổi project_name
hoặc task_name
, hãy sử dụng --project
và --name
các đối số của train.py
script, theo mặc định, project sẽ được gọi là YOLOv5
và nhiệm vụ Training
. XIN LƯU Ý: ClearML sử dụng /
làm dấu phân cách cho các dự án con, vì vậy hãy cẩn thận khi sử dụng /
trong tên dự án của bạn!
python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
hoặc với tên dự án và tác vụ tùy chỉnh:
python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache
Thao tác này sẽ thu thập:
- Mã nguồn + các thay đổi chưa cam kết
- Các gói đã cài đặt
- Tham số (Hyper)
- Các tệp mô hình (sử dụng
--save-period n
để lưu checkpoint sau mỗi n epoch) - Đầu ra bảng điều khiển
- Các đại lượng vô hướng (mAP_0.5, mAP_0.5:0.95, độ chính xác, độ thu hồi, các loại loss, learning rate, ...)
- Thông tin chung như chi tiết máy, thời gian chạy, ngày tạo, v.v.
- Tất cả các biểu đồ được tạo ra như biểu đồ tương quan nhãn và ma trận nhầm lẫn
- Hình ảnh với bounding box trên mỗi epoch
- Mosaic trên mỗi epoch
- Hình ảnh xác thực trên mỗi epoch
Thật nhiều phải không? 🤯 Giờ đây, chúng ta có thể trực quan hóa tất cả thông tin này trong giao diện người dùng ClearML để có được cái nhìn tổng quan về tiến trình huấn luyện của mình. Thêm các cột tùy chỉnh vào chế độ xem bảng (ví dụ: mAP_0.5) để bạn có thể dễ dàng sắp xếp mô hình hoạt động tốt nhất. Hoặc chọn nhiều thử nghiệm và so sánh trực tiếp chúng!
Chúng ta thậm chí có thể làm được nhiều hơn nữa với tất cả thông tin này, như tối ưu hóa siêu tham số và thực thi từ xa, vì vậy hãy tiếp tục đọc nếu bạn muốn xem điều đó hoạt động như thế nào!
🔗 Quản lý phiên bản bộ dữ liệu
Việc quản lý phiên bản dữ liệu của bạn riêng biệt với mã thường là một ý tưởng tốt và giúp bạn dễ dàng có được phiên bản mới nhất. Kho lưu trữ này hỗ trợ cung cấp ID phiên bản tập dữ liệu và nó sẽ đảm bảo lấy dữ liệu nếu nó chưa có ở đó. Bên cạnh đó, quy trình làm việc này cũng lưu ID tập dữ liệu đã sử dụng như một phần của tham số tác vụ, vì vậy bạn sẽ luôn biết chắc chắn dữ liệu nào đã được sử dụng trong thí nghiệm nào!
Chuẩn bị Bộ dữ liệu của bạn
Kho lưu trữ YOLOv5 hỗ trợ một số bộ dữ liệu khác nhau bằng cách sử dụng các tệp YAML chứa thông tin của chúng. Theo mặc định, các bộ dữ liệu được tải xuống ../datasets
so với thư mục gốc của kho lưu trữ. Vì vậy, nếu bạn đã tải xuống coco128
dataset bằng cách sử dụng liên kết trong YAML hoặc với các script được cung cấp bởi yolov5, bạn sẽ có cấu trúc thư mục này:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Nhưng đây có thể là bất kỳ bộ dữ liệu nào bạn muốn. Vui lòng sử dụng bộ dữ liệu của riêng bạn, miễn là bạn tuân thủ cấu trúc thư mục này.
Tiếp theo, ⚠️sao chép tệp YAML tương ứng vào thư mục gốc của bộ dữ liệu⚠️. Tệp YAML này chứa thông tin mà ClearML sẽ cần để sử dụng bộ dữ liệu một cách chính xác. Bạn cũng có thể tự tạo tệp này, chỉ cần tuân theo cấu trúc của các tệp YAML mẫu.
Về cơ bản, chúng ta cần các khóa sau: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Tải lên Bộ dữ liệu của Bạn
Để đưa bộ dữ liệu này vào ClearML dưới dạng bộ dữ liệu được quản lý phiên bản, hãy chuyển đến thư mục gốc của bộ dữ liệu và chạy lệnh sau:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
Câu lệnh clearml-data sync
thực chất là một lệnh viết tắt. Bạn cũng có thể chạy các lệnh này liên tiếp:
# Optionally add --parent <parent_dataset_id> 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 close
Chạy huấn luyện bằng bộ dữ liệu ClearML
Bây giờ bạn đã có một bộ dữ liệu ClearML, bạn có thể sử dụng nó rất đơn giản để huấn luyện các mô hình YOLOv5 🚀 tùy chỉnh!
python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache
👀 Tối ưu hóa siêu tham số
Bây giờ chúng ta đã có các thử nghiệm và dữ liệu được kiểm soát phiên bản, đã đến lúc xem xét những gì chúng ta có thể xây dựng trên đó!
Sử dụng thông tin mã, các gói đã cài đặt và chi tiết môi trường, bản thân thử nghiệm giờ đây hoàn toàn có thể tái tạo. Trên thực tế, ClearML cho phép bạn sao chép một thử nghiệm và thậm chí thay đổi các tham số của nó. Sau đó, chúng ta có thể chỉ cần chạy lại nó với các tham số mới này một cách tự động, đây về cơ bản là những gì HPO làm!
Để chạy tối ưu hóa siêu tham số cục bộ, chúng tôi đã đưa vào một script dựng sẵn cho bạn. Chỉ cần đảm bảo rằng một tác vụ huấn luyện đã được chạy ít nhất một lần, để nó nằm trong trình quản lý thử nghiệm ClearML, về cơ bản chúng ta sẽ sao chép nó và thay đổi các siêu tham số của nó.
Bạn sẽ cần điền ID của template task
trong script được tìm thấy tại utils/loggers/clearml/hpo.py
và sau đó chỉ cần chạy nó. Bạn có thể thay đổi task.execute_locally()
đến task.execute()
để đưa nó vào hàng đợi ClearML và có một tác nhân từ xa làm việc trên đó.
# 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
🤯 Thực thi từ xa (nâng cao)
Chạy HPO cục bộ thực sự rất tiện dụng, nhưng nếu chúng ta muốn chạy thử nghiệm của mình trên một máy từ xa thì sao? Có thể bạn có quyền truy cập vào một máy GPU rất mạnh tại chỗ hoặc bạn có một số ngân sách để sử dụng GPU đám mây. Đây là nơi ClearML Agent phát huy tác dụng. Xem những gì agent có thể làm tại đây:
Tóm lại: mọi thử nghiệm được theo dõi bởi trình quản lý thử nghiệm đều chứa đủ thông tin để tái tạo nó trên một máy khác (các gói đã cài đặt, các thay đổi chưa cam kết, v.v.). Vì vậy, một agent ClearML chỉ làm điều đó: nó lắng nghe một hàng đợi cho các tác vụ đến và khi tìm thấy một tác vụ, nó sẽ tạo lại môi trường và chạy nó trong khi vẫn báo cáo các đại lượng vô hướng, biểu đồ, v.v. cho trình quản lý thử nghiệm.
Bạn có thể biến bất kỳ máy nào (VM đám mây, máy GPU cục bộ, máy tính xách tay của bạn...) thành một tác nhân ClearML bằng cách chạy đơn giản:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]
Sao chép, Chỉnh sửa và Đưa vào hàng đợi
Với tác nhân của chúng tôi đang chạy, chúng ta có thể giao cho nó một số công việc. Hãy nhớ từ phần HPO rằng chúng ta có thể sao chép một tác vụ và chỉnh sửa các siêu tham số? Chúng ta cũng có thể làm điều đó từ giao diện!
🪄 Sao chép thử nghiệm bằng cách nhấp chuột phải vào nó
🎯 Chỉnh sửa các siêu tham số theo ý muốn của bạn
⏳ Xếp hàng tác vụ vào bất kỳ hàng đợi nào bằng cách nhấp chuột phải vào nó
Thực thi Tác vụ Từ xa
Bây giờ bạn có thể sao chép một tác vụ như chúng tôi đã giải thích ở trên hoặc chỉ cần đánh dấu tập lệnh hiện tại của bạn bằng cách thêm task.execute_remotely()
và khi thực thi, nó sẽ được đưa vào hàng đợi để agent bắt đầu làm việc!
Để chạy script huấn luyện YOLOv5 từ xa, tất cả những gì bạn phải làm là thêm dòng này vào script training.py sau khi trình ghi nhật ký clearml được khởi tạo:
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ ADD THIS LINE
# Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML
data_dict = loggers.clearml.data_dict
# ...
Khi chạy tập lệnh huấn luyện sau thay đổi này, python sẽ chạy tập lệnh cho đến dòng đó, sau đó nó sẽ đóng gói mã và gửi nó đến hàng đợi!
Tự động điều chỉnh quy mô workers
ClearML cũng đi kèm với autoscaler! Công cụ này sẽ tự động khởi động các máy từ xa mới trên đám mây bạn chọn (AWS, GCP, Azure) và biến chúng thành các ClearML agent cho bạn bất cứ khi nào có các thử nghiệm được phát hiện trong hàng đợi. Sau khi các tác vụ được xử lý, autoscaler sẽ tự động tắt các máy từ xa và bạn ngừng trả tiền!
Xem video giới thiệu về autoscaler bên dưới.
Tìm hiểu thêm
Để biết thêm thông tin về tích hợp ClearML với các mô hình Ultralytics, hãy xem hướng dẫn tích hợp ClearML của chúng tôi và khám phá cách bạn có thể nâng cao quy trình MLOps của mình bằng các công cụ theo dõi thử nghiệm khác.