paint-brush
Cách thiết lập máy phát triển với MLFlow và MinIOtừ tác giả@minio
6,279 lượt đọc
6,279 lượt đọc

Cách thiết lập máy phát triển với MLFlow và MinIO

từ tác giả MinIO10m2023/11/03
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Bài đăng này cung cấp công thức dễ thực hiện để thiết lập MLflow và MinIO trên máy phát triển.
featured image - Cách thiết lập máy phát triển với MLFlow và MinIO
MinIO HackerNoon profile picture

Giới thiệu về MLflow

MLflow là một nền tảng nguồn mở được thiết kế để quản lý toàn bộ vòng đời máy học. Databricks đã tạo ra nó như một dự án nội bộ để giải quyết những thách thức gặp phải trong quá trình triển khai và phát triển máy học của chính họ. MLflow sau đó đã được phát hành dưới dạng dự án nguồn mở vào tháng 6 năm 2018.


Là một công cụ để quản lý vòng đời hoàn chỉnh, MLflow chứa các thành phần sau.


  • Theo dõi MLflow - Kỹ sư sẽ sử dụng tính năng này nhiều nhất. Nó cho phép các thí nghiệm được ghi lại và truy vấn. Nó cũng theo dõi mã, dữ liệu, cấu hình và kết quả cho từng thử nghiệm.
  • Dự án MLflow - Cho phép sao chép thử nghiệm bằng cách đóng gói mã thành định dạng bất khả tri của nền tảng.
  • Mô hình MLflow - Triển khai các mô hình học máy vào môi trường nơi chúng có thể được phục vụ.
  • Kho lưu trữ MLflow - Cho phép lưu trữ, chú thích, khám phá và quản lý các mô hình trong kho lưu trữ trung tâm.


Có thể cài đặt tất cả các khả năng này trên máy phát triển để các kỹ sư có thể thử nghiệm theo ý muốn mà không lo làm xáo trộn quá trình cài đặt sản xuất.

Tất cả các tệp được sử dụng để cài đặt và thiết lập MLflow có thể được tìm thấy trong kho lưu trữ Github của chúng tôi.

Tùy chọn cài đặt

Tài liệu MLFlow liệt kê không dưới 6 tùy chọn để cài đặt MLFlow. Điều này có vẻ như quá mức cần thiết, nhưng các tùy chọn này đáp ứng các tùy chọn khác nhau cho cơ sở dữ liệu và mức độ phức tạp của mạng khác nhau.


Tùy chọn phù hợp nhất cho một tổ chức có nhiều nhóm sử dụng bộ dữ liệu lớn và xây dựng các mô hình mà bản thân chúng có thể khá lớn được hiển thị bên dưới. Tùy chọn này yêu cầu thiết lập ba máy chủ - máy chủ Theo dõi, cơ sở dữ liệu PostgreSQL và Kho đối tượng S3 - việc triển khai của chúng tôi sẽ sử dụng MinIO.


Tùy chọn cài đặt


Máy chủ theo dõi là một điểm vào duy nhất từ máy phát triển của kỹ sư để truy cập chức năng MLflow. (Đừng bị đánh lừa bởi tên của nó - nó chứa tất cả các thành phần được liệt kê ở trên - Theo dõi, Mô hình, Dự án và Kho lưu trữ.) Máy chủ Theo dõi sử dụng PostgreSQL để lưu trữ các thực thể. Các thực thể là các lần chạy, thông số, số liệu, thẻ, ghi chú và siêu dữ liệu. (Thông tin thêm sẽ được trình bày sau.) Máy chủ Theo dõi trong quá trình triển khai của chúng tôi truy cập MinIO để lưu trữ các tạo phẩm. Ví dụ về các tạo phẩm là mô hình, bộ dữ liệu và tệp cấu hình.


Điều thú vị về công cụ hiện đại có sẵn cho các kỹ sư ngày nay là bạn có thể mô phỏng môi trường sản xuất - bao gồm lựa chọn công cụ và kết nối mạng - bằng cách sử dụng các thùng chứa. Đó là những gì tôi sẽ trình bày trong bài viết này. Tôi sẽ hướng dẫn cách sử dụng Docker Compose để cài đặt các máy chủ được mô tả ở trên dưới dạng dịch vụ chạy trong vùng chứa. Ngoài ra, cấu hình của MLflow được thiết lập sao cho bạn có thể sử dụng phiên bản MinIO hiện có nếu muốn. Trong bài đăng này, tôi sẽ trình bày cách triển khai một phiên bản MinIO hoàn toàn mới, nhưng các tệp trong kho lưu trữ Github của chúng tôi có tệp `docker-compose` hiển thị cách kết nối với phiên bản MinIO hiện có.

Những gì chúng tôi sẽ cài đặt

Dưới đây là danh sách mọi thứ cần được cài đặt. Danh sách này bao gồm các máy chủ sẽ trở thành dịch vụ trong vùng chứa (MinIO, Postgres và MLFlow), cũng như SDK bạn sẽ cần (MinIO và MLflow).


  1. Máy tính để bàn Docker

  2. Máy chủ theo dõi MLFlow thông qua Docker Compose

  3. Máy chủ MinIO thông qua Docker Compose

  4. PostgresSQL thông qua Docker Compose

  5. SDK MLFlow thông qua cài đặt pip

  6. SDK MinIO thông qua cài đặt pip


Hãy bắt đầu với Docker Desktop, nó sẽ đóng vai trò là máy chủ lưu trữ cho các dịch vụ Docker Compose của chúng tôi.

Máy tính để bàn Docker

Bạn có thể tìm thấy bản cài đặt thích hợp cho hệ điều hành của mình trên trang web của Docker. Nếu bạn đang cài đặt Docker Desktop trên máy Mac thì bạn cần biết chip mà máy Mac của bạn đang sử dụng - Apple hoặc Intel. Bạn có thể xác định điều này bằng cách nhấp vào biểu tượng Apple ở góc trên bên trái của máy Mac và nhấp vào tùy chọn menu “Giới thiệu về máy Mac này”.


Bây giờ chúng ta đã sẵn sàng để cài đặt các dịch vụ của mình.

Máy chủ MLFlow, Postgres và MinIO

Máy chủ theo dõi MFLow, PostgresSQL và MinIO sẽ được cài đặt dưới dạng dịch vụ bằng tệp Docker Compose được hiển thị bên dưới.


 version: "3.3" services: db: restart: always image: postgres container_name: mlflow_db expose: - "${PG_PORT}" networks: - backend environment: - POSTGRES_USER=${PG_USER} - POSTGRES_PASSWORD=${PG_PASSWORD} - POSTGRES_DATABASE=${PG_DATABASE} volumes: - ./db_data:/var/lib/postgresql/data/ healthcheck: test: ["CMD", "pg_isready", "-p", "${PG_PORT}", "-U", "${PG_USER}"] interval: 5s timeout: 5s retries: 3 s3: restart: always image: minio/minio container_name: mlflow_minio volumes: - ./minio_data:/data ports: - "${MINIO_PORT}:9000" - "${MINIO_CONSOLE_PORT}:9001" networks: - frontend - backend environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_ADDRESS=${MINIO_ADDRESS} - MINIO_PORT=${MINIO_PORT} - MINIO_STORAGE_USE_HTTPS=${MINIO_STORAGE_USE_HTTPS} - MINIO_CONSOLE_ADDRESS=${MINIO_CONSOLE_ADDRESS} command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 tracking_server: restart: always build: ./mlflow image: mlflow_server container_name: mlflow_server depends_on: - db ports: - "${MLFLOW_PORT}:5000" networks: - frontend - backend environment: - AWS_ACCESS_KEY_ID=${MINIO_ACCESS_KEY} - AWS_SECRET_ACCESS_KEY=${MINIO_SECRET_ACCESS_KEY} - MLFLOW_S3_ENDPOINT_URL=http://s3:${MINIO_PORT} - MLFLOW_S3_IGNORE_TLS=true command: > mlflow server --backend-store-uri postgresql://${PG_USER}:${PG_PASSWORD}@db:${PG_PORT}/${PG_DATABASE} --host 0.0.0.0 --serve-artifacts --artifacts-destination s3://${MLFLOW_BUCKET_NAME} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${MLFLOW_PORT}/"] interval: 30s timeout: 10s retries: 3 volumes: db_data: minio_data: networks: frontend: driver: bridge backend: driver: bridge


Có một số điều đáng lưu ý sẽ giúp bạn khắc phục sự cố nếu có sự cố xảy ra. Đầu tiên, cả MinIO và PostgreSQL đều đang sử dụng hệ thống tệp cục bộ để lưu trữ dữ liệu. Đối với PostgreSQL, đây là thư mục `db_data` và đối với MinIO, đó là thư mục `minio_data`. Nếu bạn muốn bắt đầu lại với quá trình cài đặt sạch sẽ, hãy xóa các thư mục này.


Tiếp theo, tệp Docker Compose này được điều khiển cấu hình. Ví dụ: thay vì mã hóa cứng tên cơ sở dữ liệu PostgreSQL thành `mlflow`, tên này xuất phát từ tệp `config.env` được hiển thị bên dưới bằng cú pháp sau trong tệp Docker Compose - `${PG_DATABASE}`.


 # Postgres configuration PG_USER=mlflow PG_PASSWORD=mlflow PG_DATABASE=mlflow PG_PORT=5432 # MLflow configuration MLFLOW_PORT=5000 MLFLOW_BUCKET_NAME=mlflow # MinIO access keys - these are needed by MLflow MINIO_ACCESS_KEY=XeAMQQjZY2pTcXWfxh4H MINIO_SECRET_ACCESS_KEY=wyJ30G38aC2UcyaFjVj2dmXs1bITYkJBcx0FtljZ # MinIO configuration MINIO_ROOT_USER: 'minio_user' MINIO_ROOT_PASSWORD: 'minio_pwd' MINIO_ADDRESS: ':9000' MINIO_STORAGE_USE_HTTPS: False MINIO_CONSOLE_ADDRESS: ':9001' MINIO_PORT=9000 MINIO_CONSOLE_PORT=9001


Tất cả các biến môi trường mà các dịch vụ này cần đều được thiết lập trong tệp này. Tệp cấu hình này cũng chứa thông tin cần thiết để các dịch vụ này liên lạc với nhau. Lưu ý rằng việc sử dụng các biến môi trường sẽ thông báo cho máy chủ Theo dõi MLFlow cách truy cập MinIO. Nói cách khác, URL (bao gồm số cổng), khóa truy cập, khóa truy cập bí mật và nhóm. Điều này dẫn tôi đến điểm cuối cùng và quan trọng nhất về việc sử dụng Docker Compose - lần đầu tiên bạn sử dụng các dịch vụ này, dịch vụ Theo dõi MLflow sẽ không hoạt động vì trước tiên bạn cần phải truy cập vào Giao diện người dùng MinIO, lấy khóa và tạo nhóm mà dịch vụ theo dõi sẽ sử dụng để lưu trữ các hiện vật.


Hãy làm điều này ngay bây giờ. Bắt đầu dịch vụ lần đầu tiên bằng lệnh bên dưới.


 docker-compose --env-file config.env up -d --build


Đảm bảo bạn chạy lệnh này trong cùng thư mục chứa tệp Docker Compose của bạn.


Bây giờ chúng ta có thể lấy chìa khóa và tạo nhóm bằng giao diện người dùng MinIO.

Bảng điều khiển MinIO

Từ trình duyệt của bạn, truy cập `localhost:9001`. Nếu bạn đã chỉ định một cổng khác cho địa chỉ bảng điều khiển MinIO trong tệp `docker-compose`, hãy sử dụng cổng đó để thay thế. Đăng nhập bằng người dùng root và mật khẩu được chỉ định trong tệp `config.env`.


Sau khi bạn đăng nhập, hãy điều hướng đến tab Khóa truy cập và nhấp vào nút Tạo khóa truy cập.


Tab Phím truy cập


Thao tác này sẽ đưa bạn đến trang Tạo khóa truy cập.


Tạo trang Khóa truy cập



Khóa truy cập và khóa bí mật của bạn sẽ không được lưu cho đến khi bạn nhấp vào nút Tạo. Không điều hướng khỏi trang này cho đến khi việc này được thực hiện. Đừng lo lắng về việc sao chép các phím từ màn hình này. Sau khi nhấp vào nút Tạo, bạn sẽ được cung cấp tùy chọn tải khóa xuống hệ thống tệp của mình (trong tệp JSON). Nếu bạn muốn sử dụng MinIO SDK để quản lý dữ liệu thô thì hãy tạo một khóa truy cập và khóa bí mật khác khi bạn đang ở trang này.


Tạo khóa truy cập


Tiếp theo, tạo một nhóm có tên `mlflow`. Việc này rất đơn giản, hãy chuyển đến tab Nhóm và nhấp vào nút `Tạo Nhóm`.


Sau khi có khóa và tạo vùng chứa, bạn có thể hoàn tất việc thiết lập dịch vụ bằng cách dừng vùng chứa, cập nhật `config.env`, sau đó khởi động lại vùng chứa. Lệnh bên dưới sẽ dừng và xóa vùng chứa của bạn.


 docker-compose down


Khởi động lại:

 docker-compose --env-file config.env up -d --build


Tiếp theo hãy khởi động giao diện người dùng MLflow và đảm bảo mọi thứ đều hoạt động.

Khởi động giao diện người dùng MLflow

Điều hướng đến `localhost:5000`. Bạn sẽ thấy giao diện người dùng MLflow.


Khởi động giao diện người dùng MLflow


Hãy dành chút thời gian để khám phá tất cả các tab. Nếu bạn chưa quen với MLflow, hãy làm quen với khái niệm Chạy và Thử nghiệm.


  • Chạy là quá trình chuyển qua mã của bạn và thường dẫn đến một mô hình được đào tạo.
  • Thử nghiệm là một cách để gắn thẻ các lần chạy liên quan để bạn có thể thấy chúng được nhóm lại với nhau trong giao diện người dùng MLflow. Ví dụ: bạn có thể đã huấn luyện một số mô hình bằng cách sử dụng các tham số khác nhau nhằm cố gắng đạt được độ chính xác (hoặc hiệu suất) tốt nhất. Việc gắn thẻ các lần chạy này với cùng tên thử nghiệm sẽ nhóm chúng lại với nhau trong tab Thử nghiệm.

Cài đặt gói Python MLflow.

Gói MLflow Python là một bản cài đặt `pip` đơn giản. Tôi khuyên bạn nên cài đặt nó trong môi trường ảo Python.


 pip install mlflow


Kiểm tra kỹ quá trình cài đặt bằng cách liệt kê thư viện MLflow.


 pip list | grep mlflow


Bạn sẽ thấy thư viện bên dưới.


 mlflow 2.5.0

Cài đặt gói Python MinIO

Bạn không cần truy cập trực tiếp vào MinIO để tận dụng các tính năng MLflow - SDK MLflow sẽ giao tiếp với phiên bản MinIO mà chúng tôi đã thiết lập ở trên. Tuy nhiên, bạn có thể muốn giao tiếp trực tiếp với phiên bản MinIO này để quản lý dữ liệu trước khi cấp cho MLflow. MinIO là một cách tuyệt vời để lưu trữ tất cả các loại dữ liệu phi cấu trúc. MinIO tận dụng tối đa phần cứng cơ bản nên bạn có thể lưu tất cả dữ liệu thô mình cần mà không phải lo lắng về quy mô hoặc hiệu suất . MinIO bao gồm các tính năng sao chép nhóm để giữ cho dữ liệu ở nhiều vị trí được đồng bộ hóa. Ngoài ra, một ngày nào đó AI sẽ được quản lý; Khi ngày này đến, bạn sẽ cần các tính năng doanh nghiệp của MinIO ( khóa đối tượng , lập phiên bản , mã hóakhóa pháp lý ) để bảo mật dữ liệu của bạn khi lưu trữ và đảm bảo bạn không vô tình xóa nội dung nào đó mà cơ quan quản lý có thể yêu cầu.


Nếu bạn đã cài đặt gói MLflow Python trong môi trường ảo, hãy cài đặt MinIO trong cùng môi trường.


 pip install minio


Kiểm tra kỹ quá trình cài đặt.

 pip list | grep minio


Điều này sẽ xác nhận rằng thư viện Minio đã được cài đặt và hiển thị phiên bản bạn đang sử dụng.

 minio 7.1.15

Bản tóm tắt

Bài đăng này cung cấp công thức dễ thực hiện để thiết lập MLflow và MinIO trên máy phát triển. Mục đích là giúp bạn tiết kiệm thời gian và công sức nghiên cứu máy chủ MLflow và cấu hình docker-compose.


Mọi nỗ lực đã được thực hiện để giữ cho công thức này chính xác. Nếu bạn gặp sự cố, vui lòng cho chúng tôi biết bằng cách liên hệ với chúng tôi theo địa chỉ [email protected] hoặc tham gia thảo luận trên kênh Slack chung của chúng tôi.


Bạn đã sẵn sàng bắt đầu viết mã và đào tạo các mô hình với MLflow và MinIO.


Cũng được xuất bản ở đây .