YAML Ain't Markup Language (YAML) là ngôn ngữ tuần tự hóa dữ liệu có thể đọc được bằng con người, thường được sử dụng cho các tệp cấu hình và trong các ứng dụng lưu trữ hoặc truyền dữ liệu. Được thiết kế để đơn giản và dễ đọc, YAML đặc biệt có giá trị trong Trí tuệ nhân tạo (AI) và Học máy (ML) để quản lý các cấu hình phức tạp liên quan đến mô hình, quy trình đào tạo và đường ống triển khai. Cú pháp đơn giản của nó giúp quy trình làm việc AI/ML dễ hiểu hơn, dễ bảo trì hơn và dễ tái tạo hơn.
Các tính năng chính của YAML
YAML ưu tiên khả năng đọc của con người. Cấu trúc của nó dựa nhiều vào thụt lề để biểu thị thứ bậc, tương tự như Python , tạo ra các tệp sạch hơn so với các định dạng như XML hoặc JSON . Các đặc điểm chính bao gồm:
- Cú pháp dễ đọc: Việc sử dụng tối thiểu dấu ngoặc hoặc thẻ giúp tệp dễ đọc và chỉnh sửa.
- Cấu trúc thông qua thụt lề: Sử dụng khoảng trắng (không phải tab) để xác định các cấu trúc lồng nhau, giúp tăng tính rõ ràng.
- Hỗ trợ cấu trúc dữ liệu: Hỗ trợ các kiểu dữ liệu phổ biến như số vô hướng (chuỗi, số, boolean), danh sách (chuỗi) và từ điển (ánh xạ/cặp khóa-giá trị).
- Bình luận: Cho phép thêm bình luận bằng cách sử dụng
#
biểu tượng cho tài liệu trong tập tin. - Tính linh hoạt: Có thể biểu diễn các cấu trúc dữ liệu phức tạp phù hợp với nhiều nhu cầu cấu hình khác nhau.
Bạn có thể tìm hiểu thêm về cấu trúc của nó từ Đặc tả YAML chính thức.
YAML trong các ứng dụng AI và ML
Các tệp YAML được sử dụng rộng rãi trong bối cảnh AI và ML để xác định và quản lý nhiều khía cạnh khác nhau của vòng đời dự án, thúc đẩy tính nhất quán và cộng tác bằng cách tách cấu hình khỏi mã. Các lĩnh vực ứng dụng chính bao gồm:
- Cấu hình mô hình: Xác định kiến trúc của mạng nơ-ron (NN) , bao gồm các lớp, hàm kích hoạt như ReLU hoặc SiLU và các kết nối. Các khuôn khổ như PyTorch và TensorFlow thường sử dụng YAML để cấu hình các mô hình. Ví dụ, các mô hình YOLO Ultralytics , chẳng hạn như YOLOv8 và YOLO11 , sử dụng các tệp YAML để chỉ định cấu trúc mô hình, bao gồm xương sống và đầu phát hiện .
- Định nghĩa tập dữ liệu: Chỉ định đường dẫn đến dữ liệu đào tạo , dữ liệu xác thực , tên lớp và các tham số cụ thể khác của tập dữ liệu. Điều này phổ biến đối với các tác vụ như phát hiện đối tượng bằng cách sử dụng các tập dữ liệu như COCO hoặc VOC . Ultralytics sử dụng rộng rãi các tệp YAML để xác định tập dữ liệu .
- Cấu hình đường ống đào tạo: Chỉ định siêu tham số và cài đặt cho quá trình đào tạo mô hình. Điều này bao gồm các thông số như kích thước lô hàng, tỷ lệ học tập, số lượng thời đại, thuật toán tối ưu hóa (ví dụ, Ađam), Và tăng cường dữ liệu chiến lược. Ví dụ: Một tập tin YAML có thể chỉ định
epochs: 100
, batch_size: 16
, learning_rate: 0.001
và liệt kê các kỹ thuật tăng cường như lật hoặc xoay ngẫu nhiên. Điều này cho phép các nhà nghiên cứu và kỹ sư dễ dàng theo dõi và sửa đổi các thí nghiệm đào tạo. - MLOps Pipelines: Xác định quy trình công việc trong nền tảng Machine Learning Operations (MLOps) . Các công cụ như Kubeflow Pipelines và MLflow Projects sử dụng YAML để mô tả trình tự các bước trong một quy trình ML, từ xử lý trước dữ liệu đến triển khai và giám sát mô hình .
- Cấu hình triển khai: Chỉ định các thiết lập để triển khai các mô hình, chẳng hạn như yêu cầu tài nguyên (ví dụ: phân bổ CPU / GPU ), tham số mở rộng và biến môi trường, thường được sử dụng kết hợp với các công nghệ chứa như Docker . Ví dụ: YAML triển khai cho cụm Kubernetes có thể xác định số lượng bản sao cho một mô hình phục vụ điểm cuối, giới hạn bộ nhớ và hình ảnh Docker cần sử dụng. Xem Ultralytics Docker Quickstart để biết các thiết lập liên quan.
YAML so với các định dạng khác
Mặc dù YAML có mục đích tương tự như các định dạng tuần tự hóa dữ liệu khác nhưng nó có những đặc điểm riêng biệt:
- YAML so với JSON (Ký hiệu đối tượng JavaScript) : Cả hai đều có thể đọc được bằng con người và hỗ trợ các cấu trúc dữ liệu tương tự. JSON nghiêm ngặt hơn, yêu cầu dấu ngoặc kép quanh chuỗi và sử dụng dấu ngoặc nhọn
{}
và dấu ngoặc []
. YAML thường được coi là dễ đọc hơn đối với các cấu hình phức tạp do sử dụng thụt lề và cú pháp tối thiểu. Tuy nhiên, JSON được sử dụng rộng rãi hơn cho các API web. Bạn có thể tìm thấy thêm thông tin chi tiết tại JSON.org. - YAML so với XML (Ngôn ngữ đánh dấu mở rộng) : XML là một ngôn ngữ đánh dấu được định nghĩa bởi W3C sử dụng thẻ (
<tag>...</tag>
) để định nghĩa các phần tử. Nó chi tiết hơn YAML và JSON. Mặc dù mạnh mẽ cho việc cấu trúc và xác thực tài liệu (ví dụ: trong chú thích dữ liệu), XML thường ít được ưa chuộng hơn đối với các tệp cấu hình đòi hỏi tính dễ đọc so với phong cách rõ ràng hơn của YAML.
Việc YAML tập trung vào khả năng đọc hiểu của con người khiến nó trở thành lựa chọn tuyệt vời cho các tệp cấu hình trong các dự án AI/ML, giúp đơn giản hóa việc quản lý và cải thiện khả năng cộng tác, đặc biệt là trong các nền tảng như Ultralytics HUB giúp hợp lý hóa vòng đời ML.