Merhaba Habrovsk sakinleri. Daha önce de yazdığımız gibi OTUS bu ay aynı anda iki makine öğrenimi kursu başlatıyor: temel и ileri. Bu bağlamda faydalı materyaller paylaşmaya devam ediyoruz.
Bu yazının amacı ilk kullanım deneyimimizden bahsetmek. ML akışı.
İncelemeye başlayacağız ML akışı izleme sunucusundan alın ve çalışmanın tüm yinelemelerini günlüğe kaydedin. Daha sonra Spark'ı MLflow'a UDF kullanarak bağlama deneyimimizi paylaşacağız.
Bağlam
Biz Alfa Sağlık İnsanların sağlıklarının ve refahlarının sorumluluğunu üstlenmelerini sağlamak için makine öğrenimini ve yapay zekayı kullanıyoruz. Makine öğrenimi modellerinin geliştirdiğimiz veri bilimi ürünlerinin kalbinde yer almasının nedeni budur ve makine öğrenimi yaşam döngüsünün tüm yönlerini kapsayan açık kaynaklı bir platform olan MLflow'u tercih etmemizin nedeni de budur.
ML akışı
MLflow'un temel amacı, veri bilimcilerinin hemen hemen her makine öğrenimi kitaplığıyla çalışmasına olanak tanıyacak, makine öğreniminin üstüne ek bir katman sağlamaktır (h2o, keras, sıçrama, pytorch, skleöğrenmek и tensorflow), işini bir sonraki seviyeye taşıyor.
MLflow üç bileşen sağlar:
Takip – deneylerin kaydedilmesi ve istekleri: kod, veriler, konfigürasyon ve sonuçlar. Model oluşturma sürecini izlemek çok önemlidir.
Projeler – Herhangi bir platformda çalışacak paketleme formatı (ör. SageMaker)
Modeller – modelleri çeşitli dağıtım araçlarına göndermek için ortak bir format.
MLflow (yazıldığı sırada alfa sürümündeydi), deneme, yeniden kullanım ve dağıtım da dahil olmak üzere makine öğrenimi yaşam döngüsünü yönetmenize olanak tanıyan açık kaynaklı bir platformdur.
MLflow'u ayarlama
MLflow'u kullanmak için öncelikle Python ortamınızın tamamını kurmanız gerekir, bunun için kullanacağız PyEnv (Python'u Mac'e yüklemek için şuraya göz atın: burada). Bu şekilde, onu çalıştırmak için gerekli tüm kütüphaneleri kuracağımız sanal bir ortam oluşturabiliriz.
```
pyenv install 3.7.0
pyenv global 3.7.0 # Use Python 3.7
mkvirtualenv mlflow # Create a Virtual Env with Python 3.7
workon mlflow
```
Not: UDF gibi modelleri çalıştırmak için PyArrow'u kullanıyoruz. PyArrow ve Numpy sürümlerinin birbirleriyle çakışması nedeniyle düzeltilmesi gerekiyordu.
İzleme Arayüzünü Başlat
MLflow İzleme, Python kullanarak deneyleri günlüğe kaydetmemize ve sorgulamamıza olanak tanır ve DİNLENME API'dir. Ek olarak, model yapıtlarının nerede depolanacağını (localhost, Amazon S3, Azure Blob Depolama, Google Cloud Storage veya SFTP sunucusu). Alpha Health'te AWS kullandığımız için yapı depolama alanımız S3 olacaktır.
# Running a Tracking Server
mlflow server
--file-store /tmp/mlflow/fileStore
--default-artifact-root s3://<bucket>/mlflow/artifacts/
--host localhost
--port 5000
MLflow, kalıcı dosya depolamanın kullanılmasını önerir. Dosya depolama, sunucunun çalıştırma ve deneme meta verilerini depolayacağı yerdir. Sunucuyu başlatırken kalıcı dosya deposunu gösterdiğinden emin olun. Burada deney için basitçe kullanacağız /tmp.
Eski denemeleri çalıştırmak için mlflow sunucusunu kullanmak istersek bunların dosya deposunda bulunması gerektiğini unutmayın. Ancak bu olmasa bile bunları UDF'de kullanabiliriz çünkü yalnızca modelin yoluna ihtiyacımız var.
Not: İzleme Kullanıcı Arayüzü ve model istemcisinin yapı konumuna erişimi olması gerektiğini unutmayın. Yani, İzleme Kullanıcı Arayüzü'nün bir EC2 örneğinde bulunmasına bakılmaksızın, MLflow'u yerel olarak çalıştırırken makinenin yapıt modelleri yazmak için S3'e doğrudan erişimi olması gerekir.
İzleme kullanıcı arayüzü, yapıları bir S3 klasöründe depolar
Daha önce tartıştığımız gibi MLflow, model parametrelerini, ölçümleri ve yapıtları günlüğe kaydetmenize olanak tanır, böylece yinelemeler boyunca nasıl geliştiklerini takip edebilirsiniz. Bu özellik son derece kullanışlıdır çünkü bu şekilde İzleme sunucusuyla iletişim kurarak veya git karma kayıtlarını kullanarak hangi kodun gerekli yinelemeyi tamamladığını anlayarak en iyi modeli yeniden üretebiliriz.
“mlflow sunucusu” komutu kullanılarak başlatılan MLflow izleme sunucusu, çalıştırmaları izlemek ve verileri yerel dosya sistemine yazmak için bir REST API'sine sahiptir. "MLFLOW_TRACKING_URI" ortam değişkenini kullanarak izleme sunucusu adresini belirtebilirsiniz; MLflow izleme API'si, başlatma bilgileri, günlük ölçümleri vb. oluşturmak/almak için bu adresteki izleme sunucusuyla otomatik olarak iletişim kuracaktır.
Modele bir sunucu sağlamak için çalışan bir izleme sunucusuna (başlatma arayüzüne bakın) ve modelin Çalıştırma Kimliğine ihtiyacımız var.
Çalıştırma kimliği
# Serve a sklearn model through 127.0.0.0:5005
MLFLOW_TRACKING_URI=http://0.0.0.0:5000 mlflow sklearn serve
--port 5005
--run_id 0f8691808e914d1087cf097a08730f17
--model-path model
MLflow sunma işlevini kullanarak modelleri sunmak için, yalnızca belirterek model hakkında bilgi almak amacıyla İzleme Kullanıcı Arayüzü'ne erişmemiz gerekir. --run_id.
Model İzleme sunucusuyla iletişim kurduğunda yeni bir model uç noktası alabiliriz.
İzleme sunucusu modellere gerçek zamanlı hizmet verecek kadar güçlü olmasına rağmen onları eğitin ve sunucunun işlevselliğini kullanın (kaynak: mlflow // belgeler // modeller # yerel), Spark kullanımı (toplu veya akış) dağıtım nedeniyle daha da güçlü bir çözümdür.
Eğitimi çevrimdışı yaptığınızı ve ardından çıktı modelini tüm verilerinize uyguladığınızı hayal edin. Spark ve MLflow'un parladığı yer burasıdır.
MLflow modellerini Spark veri çerçevelerine nasıl uyguladığımızı göstermek için Jupyter not defterlerini PySpark ile birlikte çalışacak şekilde ayarlamamız gerekiyor.
En son kararlı sürümü yükleyerek başlayın Apache Spark:
cd ~/Downloads/
tar -xzf spark-2.4.3-bin-hadoop2.7.tgz
mv ~/Downloads/spark-2.4.3-bin-hadoop2.7 ~/
ln -s ~/spark-2.4.3-bin-hadoop2.7 ~/spark̀
Belirledikten sonra notebook-dir, defterlerimizi istenilen klasörde saklayabiliriz.
Jüpyter'i PySpark'tan başlatmak
Jupiter'i PySpark sürücüsü olarak yapılandırabildiğimiz için artık Jupyter notebook'u PySpark bağlamında çalıştırabiliyoruz.
(mlflow) afranzi:~$ pyspark
[I 19:05:01.572 NotebookApp] sparkmagic extension enabled!
[I 19:05:01.573 NotebookApp] Serving notebooks from local directory: /Users/afranzi/Projects/notebooks
[I 19:05:01.573 NotebookApp] The Jupyter Notebook is running at:
[I 19:05:01.573 NotebookApp] http://localhost:8888/?token=c06252daa6a12cfdd33c1d2e96c8d3b19d90e9f6fc171745
[I 19:05:01.573 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 19:05:01.574 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=c06252daa6a12cfdd33c1d2e96c8d3b19d90e9f6fc171745
Yukarıda bahsedildiği gibi MLflow, S3'teki model yapıtlarının günlüğe kaydedilmesine yönelik bir özellik sağlar. Seçilen modeli elimize alır almaz modülü kullanarak UDF olarak içe aktarma olanağına sahip oluyoruz. mlflow.pyfunc.
PySpark - Şarap kalitesi tahminlerinin çıktısını alma
Bu noktaya kadar PySpark'ı MLflow ile nasıl kullanacağımızı, şarap kalitesi tahminlerini tüm şarap veri kümesinde nasıl çalıştıracağımızı konuştuk. Peki ya Scala Spark'ın Python MLflow modüllerini kullanmanız gerekiyorsa?
Bunu Spark bağlamını Scala ve Python arasında bölerek de test ettik. Yani, MLflow UDF'yi Python'a kaydettik ve onu Scala'dan kullandık (evet, belki de en iyi çözüm değil, ama elimizde olan şey).
Scala Spark + MLflow
Bu örnek için ekleyeceğiz Toree Çekirdeği mevcut Jüpiter'in içine.
Spark + Toree + Jupyter'ı yükleyin
pip install toree
jupyter toree install --spark_home=${SPARK_HOME} --sys-prefix
jupyter kernelspec list
```
```
Available kernels:
apache_toree_scala /Users/afranzi/.virtualenvs/mlflow/share/jupyter/kernels/apache_toree_scala
python3 /Users/afranzi/.virtualenvs/mlflow/share/jupyter/kernels/python3
```
Ekteki not defterinden görebileceğiniz gibi UDF, Spark ve PySpark arasında paylaşılmaktadır. Bu bölümün Scala'yı seven ve makine öğrenimi modellerini üretimde dağıtmak isteyenler için faydalı olacağını umuyoruz.
MLflow bu yazının yazıldığı sırada Alpha sürümünde olmasına rağmen oldukça umut verici görünüyor. Birden fazla makine öğrenimi çerçevesini çalıştırma ve bunları tek bir uç noktadan kullanma yeteneği, öneri sistemlerini bir sonraki seviyeye taşır.
Ayrıca MLflow, Veri Mühendisleri ile Veri Bilimi uzmanlarını birbirine yakınlaştırarak aralarında ortak bir katman oluşturur.
MLflow'un bu keşfinden sonra ilerleyeceğimize ve bunu Spark ardışık düzenlerimiz ve öneri sistemlerimiz için kullanacağımıza eminiz.
Dosya depolama alanını dosya sistemi yerine veritabanıyla senkronize etmek güzel olurdu. Bu bize aynı dosya depolama alanını kullanabilecek birden fazla uç nokta sağlamalıdır. Örneğin, birden çok örnek kullanın çabuk и Athena aynı Glue meta deposuyla.
Özetlemek gerekirse, verilerle yaptığımız çalışmayı daha ilginç hale getirdiği için MLFlow topluluğuna teşekkür etmek istiyorum.
MLflow ile uğraşıyorsanız, bize yazmaktan ve onu nasıl kullandığınızı ve hatta üretimde kullanıyorsanız daha fazlasını anlatmaktan çekinmeyin.