MLflow, makine öğrenimi yaşam döngüsünün tamamını yönetmek için tasarlanmış açık kaynaklı bir platformdur. Databricks, bunu kendi makine öğrenimi geliştirme ve dağıtım süreçlerinde karşılaşılan zorlukları ele almak için dahili bir proje olarak oluşturdu. MLflow daha sonra Haziran 2018'de açık kaynaklı bir proje olarak piyasaya sürüldü.
Yaşam döngüsünün tamamını yönetmeye yönelik bir araç olarak MLflow aşağıdaki bileşenleri içerir.
Tüm bu yetenekleri bir geliştirme makinesine kurmak mümkündür; böylece mühendisler, üretim kurulumunu bozma endişesi duymadan canlarının istediği gibi deneyler yapabilirler.
MLflow'u yüklemek ve ayarlamak için kullanılan tüm dosyalar Github depomuzda bulunabilir.
MLFlow belgeleri, MLFlow'u yüklemek için en az 6 seçeneği listeler. Bu aşırı gibi görünebilir, ancak bu seçenekler bir veritabanı için farklı tercihlere ve değişen ağ karmaşıklık düzeylerine uyum sağlar.
Büyük veri kümeleri kullanan ve kendileri de oldukça büyüyebilecek modeller oluşturan birden fazla ekibe sahip bir kuruluş için en uygun seçenek aşağıda gösterilmiştir. Bu seçenek üç sunucunun (İzleme sunucusu, PostgreSQL veritabanı ve S3 Nesne Deposu) kurulumunu gerektirir; uygulamamız MinIO'yu kullanacaktır.
İzleme Sunucusu, bir mühendisin geliştirme makinesinden MLflow işlevselliğine erişim için kullanılan tek bir giriş noktasıdır. (İsmine aldanmayın; yukarıda listelenen tüm bileşenleri içerir - İzleme, Model, Projeler ve Depolar.) İzleme sunucusu, varlıkları depolamak için PostgreSQL'i kullanır. Varlıklar çalıştırmalar, parametreler, metrikler, etiketler, notlar ve meta verilerdir. (Daha sonra çalıştırmalarla ilgili daha fazla bilgi.) Uygulamamızdaki İzleme sunucusu, yapıları depolamak için MinIO'ya erişir. Yapıtlara örnek olarak modeller, veri kümeleri ve yapılandırma dosyaları verilebilir.
Bugünlerde mühendislerin kullanabileceği modern takımların güzel yanı, konteynerleri kullanarak takım seçimi ve ağ bağlantısı da dahil olmak üzere bir üretim ortamını taklit edebilmenizdir. Bu yazıda bunu göstereceğim. Yukarıda anlatılan sunucuları bir konteyner içinde çalışan hizmetler olarak kurmak için Docker Compose'un nasıl kullanılacağını göstereceğim. Ayrıca MLflow'un konfigürasyonu, dilerseniz mevcut bir MinIO örneğini kullanabileceğiniz şekilde ayarlanmıştır. Bu yazıda, yepyeni bir MinIO örneğinin nasıl dağıtılacağını göstereceğim, ancak Github depomuzdaki dosyalar, mevcut bir MinIO örneğine nasıl bağlanılacağını gösteren bir 'docker-compose' dosyasına sahiptir.
Aşağıda kurulması gereken her şeyin bir listesi bulunmaktadır. Bu liste, kapsayıcılarda hizmet haline gelecek sunucuların (MinIO, Postgres ve MLFlow) yanı sıra ihtiyaç duyacağınız SDK'ları (MinIO ve MLflow) içerir.
Docker Masaüstü
Docker Compose aracılığıyla MLFlow İzleme Sunucusu
Docker Compose aracılığıyla MinIO Sunucusu
Docker Compose aracılığıyla PostgresSQL
Pip kurulumu aracılığıyla MLFlow SDK
Pip kurulumu aracılığıyla MinIO SDK
Docker Compose hizmetlerimiz için ana bilgisayar görevi görecek olan Docker Desktop ile başlayalım.
İşletim sisteminize uygun kurulumu Docker'ın sitesinde bulabilirsiniz. Docker Desktop'ı bir Mac'e yüklüyorsanız Mac'inizin kullandığı çipi (Apple veya Intel) bilmeniz gerekir. Bunu Mac’inizin sol üst köşesindeki Apple simgesine tıklayıp “Bu Mac Hakkında” menü seçeneğine tıklayarak belirleyebilirsiniz.
Artık hizmetlerimizi kurmaya hazırız.
MFLow Takip Sunucusu, PostgresSQL ve MinIO, aşağıda gösterilen Docker Compose dosyası kullanılarak hizmet olarak kurulacaktır.
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
Bir şeyler ters gittiğinde sorunları gidermenize yardımcı olacak dikkate değer birkaç şey vardır. İlk olarak hem MinIO hem de PostgreSQL, verileri depolamak için yerel dosya sistemini kullanıyor. PostgreSQL için bu "db_data" klasörüdür ve MinIO için "minio_data" klasörüdür. Temiz bir kurulumla baştan başlamak isterseniz bu klasörleri silin.
Daha sonra, bu Docker Compose dosyası yapılandırmaya dayalıdır. Örneğin, PostgreSQL veritabanı adını "mlflow" olarak sabit kodlamak yerine, ad, Docker Compose dosyasında - "${PG_DATABASE}" aşağıdaki sözdizimini kullanarak aşağıda gösterilen "config.env" dosyasından gelir.
# 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
Bu hizmetlerin ihtiyaç duyduğu tüm ortam değişkenleri bu dosyada ayarlanmıştır. Bu yapılandırma dosyası aynı zamanda bu servislerin birbirleriyle konuşması için gerekli bilgileri de içerir. MLFlow İzleme sunucusuna MinIO'ya nasıl erişileceğini bildiren şeyin ortam değişkenlerinin kullanımı olduğuna dikkat edin. Başka bir deyişle URL (bağlantı noktası numarası dahil), erişim anahtarı, gizli erişim anahtarı ve paket. Bu beni Docker Compose kullanımıyla ilgili son ve en önemli noktaya getiriyor - bu hizmetleri ilk kez açtığınızda, MLflow İzleme hizmetleri çalışmayacaktır çünkü önce MinIO kullanıcı arayüzüne girmeniz, anahtarlarınızı almanız ve paketi oluşturmanız gerekecektir. izleme hizmetinin yapıları depolamak için kullanacağı.
Şimdi bunu yapalım. Aşağıdaki komutu kullanarak hizmetleri ilk kez başlatın.
docker-compose --env-file config.env up -d --build
Bu komutu Docker Compose dosyanızın bulunduğu dizinde çalıştırdığınızdan emin olun.
Artık MinIO kullanıcı arayüzünü kullanarak anahtarlarımızı alabilir ve paketimizi oluşturabiliriz.
Tarayıcınızdan 'localhost:9001'e gidin. 'Docker-compose' dosyasında MinIO konsol adresi için farklı bir bağlantı noktası belirttiyseniz bunun yerine o bağlantı noktasını kullanın. 'config.env' dosyasında belirtilen kök kullanıcıyı ve şifreyi kullanarak oturum açın.
Oturum açtıktan sonra Erişim Anahtarları sekmesine gidin ve Erişim anahtarı oluştur düğmesini tıklayın.
Bu sizi Erişim Anahtarı Oluştur sayfasına götürecektir.
Erişim anahtarınız ve gizli anahtarınız siz Oluştur düğmesine tıklayana kadar kaydedilmez. Bu işlem tamamlanana kadar bu sayfadan ayrılmayın. Bu ekrandan anahtarları kopyalama konusunda endişelenmeyin. Oluştur düğmesine tıkladığınızda, anahtarları dosya sisteminize (JSON dosyasında) indirme seçeneği sunulur. Ham verileri yönetmek için MinIO SDK'yı kullanmak istiyorsanız bu sayfadayken başka bir erişim anahtarı ve gizli anahtar oluşturun.
Daha sonra "mlflow" adında bir paket oluşturun. Bu çok basit; Kovalar sekmesine gidin ve 'Kova Oluştur' düğmesini tıklayın.
Anahtarlarınızı aldıktan ve paketinizi oluşturduktan sonra, kapsayıcıları durdurarak, `config.env'yi güncelleyerek ve ardından kapsayıcıları yeniden başlatarak hizmetlerin kurulumunu tamamlayabilirsiniz. Aşağıdaki komut konteynerlerinizi durduracak ve kaldıracaktır.
docker-compose down
Yeniden başlatmak:
docker-compose --env-file config.env up -d --build
Şimdi MLflow kullanıcı arayüzünü başlatalım ve her şeyin çalıştığından emin olalım.
'localhost:5000'e gidin. MLflow kullanıcı arayüzünü görmelisiniz.
Tüm sekmeleri keşfetmek için biraz zaman ayırın. MLflow'ta yeniyseniz Çalıştırma ve Denemeler kavramına aşina olun.
MLflow Python paketi basit bir 'pip' kurulumudur. Python sanal ortamına kurmanızı öneririm.
pip install mlflow
MLflow kitaplığını listeleyerek kurulumu bir kez daha kontrol edin.
pip list | grep mlflow
Aşağıdaki kütüphaneyi görmelisiniz.
mlflow 2.5.0
MLflow özelliklerinden yararlanmak için doğrudan MinIO'ya erişmenize gerek yoktur; MLflow SDK, yukarıda kurduğumuz MinIO örneğiyle arayüz oluşturacaktır. Ancak verileri MLflow'a verilmeden önce yönetmek için doğrudan MinIO'nun bu örneğiyle arayüz oluşturmak isteyebilirsiniz. MinIO, her türlü yapılandırılmamış veriyi depolamanın harika bir yoludur. MinIO, temel donanımdan tam olarak yararlanır, böylece ihtiyacınız olan tüm ham verileri ölçek veya performans konusunda endişelenmeden kaydedebilirsiniz. MinIO, birden fazla konumdaki verileri senkronize halde tutmak için paket çoğaltma özelliklerini içerir. Ayrıca bir gün yapay zeka düzenlenecek; Bu gün geldiğinde, kullanımda olmayan verilerinizi güvence altına almak ve bir düzenleyici kurumun talep edebileceği bir şeyi yanlışlıkla silmediğinizden emin olmak için MinIO'nun kurumsal özelliklerine ( nesne kilitleme , sürüm oluşturma , şifreleme ve yasal kilitler ) ihtiyacınız olacak.
MLflow Python paketini sanal ortamda kurduysanız MinIO'yu da aynı ortama kurun.
pip install minio
Kurulumu iki kez kontrol edin.
pip list | grep minio
Bu, Minio kütüphanesinin kurulduğunu doğrulayacak ve kullandığınız sürümü görüntüleyecektir.
minio 7.1.15
Bu gönderide, bir geliştirme makinesinde MLflow ve MinIO kurulumuna yönelik takip edilmesi kolay bir tarif sağlandı. Amaç, MLflow sunucularını ve docker-compose yapılandırmasını araştırmak için harcadığınız zamandan ve çabadan tasarruf etmenizi sağlamaktı.
Bu tarifin doğru kalması için her türlü çaba gösterildi. Bir sorunla karşılaşırsanız lütfen [email protected] adresine bir satır bırakarak veya genel Slack kanalımızdaki tartışmaya katılarak bize bildirin.
MLflow ve MinIO ile modelleri kodlamaya ve eğitmeye hazırsınız.
Burada da yayınlandı.