Huấn luyện và Giám sát Ultralytics YOLOv5 từ xa bằng ClearML

Ngày 21 tháng 10 năm 2022
Khám phá quan hệ đối tác của chúng tôi với ClearML để có trải nghiệm Ultralytics YOLOv5 nâng cao với tích hợp ML liền mạch, theo dõi thử nghiệm và hơn thế nữa.

Ngày 21 tháng 10 năm 2022
Khám phá quan hệ đối tác của chúng tôi với ClearML để có trải nghiệm Ultralytics YOLOv5 nâng cao với tích hợp ML liền mạch, theo dõi thử nghiệm và hơn thế nữa.
Tại Ultralytics, chúng tôi hợp tác thương mại với các startup khác để giúp tài trợ cho việc nghiên cứu và phát triển các công cụ mã nguồn mở tuyệt vời của chúng tôi, như YOLOv5, để giữ cho chúng miễn phí cho tất cả mọi người. Bài viết này có thể chứa các liên kết liên kết đến các đối tác đó.
ClearML là đối tác mới nhất của chúng tôi: một bộ công cụ mã nguồn mở được thiết kế để giúp bạn tiết kiệm thời gian.
Với sứ mệnh đẩy nhanh việc ứng dụng ML, ClearML giúp tích hợp ML liền mạch vào bất kỳ sản phẩm phần mềm và phần cứng nào.
Tích hợp này giúp việc huấn luyện mô hình YOLOv5 và sử dụng trình quản lý thử nghiệm ClearML để theo dõi nó một cách tự động trở nên đơn giản hơn. Bạn có thể dễ dàng chỉ định ID phiên bản tập dữ liệu ClearML làm đầu vào dữ liệu và nó sẽ tự động được sử dụng để huấn luyện mô hình của bạn.
Bạn có thể tùy ý sử dụng bao nhiêu công cụ trong số này, bạn có thể gắn bó với 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.
Để theo dõi các thử nghiệm và dữ liệu của bạn, ClearML cần giao tiếp với một máy chủ. Bạn có hai tùy chọn cho việc này: đăng ký miễn phí Dịch vụ được lưu trữ ClearML hoặc thiết lập máy chủ của riêng bạn, xem tại đây.
Ngay cả máy chủ cũng là mã nguồn mở, vì vậy nếu bạn đang xử lý dữ liệu nhạy cảm, thì đó không phải là vấn đề!
Và thế là xong! Bạn đã sẵn sàng để bắt đầu...
Để 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 chụp 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 truy cập trình ghi nhật ký tùy chỉnh của chúng tôi, nơi bạn có thể thay đổi nó: utils\/loggers\/clearml\/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
Điều này sẽ ghi lại:
Không tệ! 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 training của mình. Thêm các cột tùy chỉnh vào chế độ xem bảng (chẳng hạn như mAP_0.5) để bạn có thể dễ dàng sắp xếp trên 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 để tìm hiểu cách thực hiện!
Việc kiểm soát phiên bản dữ liệu của bạn riêng biệt với mã của bạn thường là một ý tưởng hay 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 các 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!
Repository 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 thư mục ..\/datasets liên quan đến thư mục gốc của repository. Vì vậy, nếu bạn đã tải xuống bộ dữ liệu coco128 bằng liên kết trong YAML hoặc bằng các script do yolov5 cung cấp, 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, ⚠️copy tệp YAML tương ứng vào thư mục gốc của bộ dữ liệu⚠️. Các tệp YAML này chứa thông tin mà ClearML sẽ cần để sử dụng đúng cách bộ dữ liệu. Bạn cũng có thể tự tạo tệp này, tất nhiên, chỉ cần làm theo cấu trúc của các YAML ví dụ.
Về cơ bản, chúng ta cần các key sau: path, train, test, val, nc, names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← TẠI ĐÂY!
|_ LICENSE
|_ README.txt
Để đư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 .
Thực tế, lệnh clearml-data sync là một lệnh viết tắt. Bạn cũng có thể chạy tuần tự các lệnh sau:
# Tùy chọn thêm --parent nếu bạn muốn dựa phiên bản này
# trên một phiên bản dataset khác, để không có file trùng lặp nào được tải lên!
clearml-data create --name coco128 --project YOLOv5/p>
clearml-data add --files .
clearml-data close
Giờ đây, khi bạn đã có một dataset ClearML, bạn có thể dễ dàng sử dụng 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:// --weights yolov5s.pt --cache
Bây giờ chúng ta đã có các thử nghiệm và phiên bản dữ liệu, đã đế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 code, các package đã 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 được. 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ạy lại nó với các tham số mới một cách tự động, đây về cơ bản là những gì HPO thực hiện!
Để chạy tối ưu hóa siêu tham số cục bộ, chúng tôi đã cung cấp 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 tác vụ template này vào 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() thành task.execute() để đưa nó vào hàng đợi ClearML và để một agent từ xa xử lý nó.
# Để sử dụng optuna, hãy cài đặt nó trước, nếu không bạn có thể thay đổi trình tối ưu hóa thành chỉ RandomSearch pip install optuna python utils/loggers/clearml/hpo.py
Chạy HPO cục bộ rất tiện lợi, nhưng nếu chúng ta muốn chạy các thử nghiệm của mình trên một máy chủ 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 khoản ngân sách để sử dụng GPU đám mây. Đây là lúc ClearML Agent phát huy tác dụng.
Xem những gì agent có thể làm tại đây:
Nói 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 package đã cài đặt, các thay đổi chưa commit, v.v.). Vì vậy, một ClearML agent thực hiện đúng điều đó: nó lắng nghe một hàng đợi cho các tác vụ đến và khi nó 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 scalar, plot, 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 riêng bạn) thành một tác nhân ClearML bằng cách chạy đơn giản:
clearml-agent daemon --queue [--docker]
Khi agent của chúng ta đang chạy, chúng ta có thể giao việc cho nó. Bạn còn nhớ từ phần HPO rằng chúng ta có thể nhân bản một tác vụ và chỉnh sửa các siêu tham số không? Chúng ta cũng có thể làm điều đó từ giao diện!
🪄 Nhân bản 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
⏳ Đưa tác vụ vào hàng đợi bất kỳ bằng cách nhấp chuột phải vào nó
Bây giờ bạn có thể nhân bản một tác vụ như chúng tôi đã giải thích ở trên, hoặc chỉ cần đánh dấu script 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 script huấn luyện sau thay đổi này, python sẽ chạy script cho đến dòng đó, sau đó nó sẽ đóng gói code và gửi nó đến hàng đợi!
ClearML cũng đi kèm với bộ tự động mở rộng! 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 tác nhân ClearML 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ý, bộ tự động mở rộng sẽ tự động tắt các máy từ xa và bạn ngừng trả tiền! Xem video bắt đầu sử dụng bộ tự động mở rộng bên dưới.
Bạn có câu hỏi nào không? Tham gia cộng đồng của chúng tôi và đặt câu hỏi của bạn ngay hôm nay!