Aracılığıyla paylaş


Günlük modeli bağımlılıkları

Bu makalede, modeli ve bağımlılıklarını model yapıtları olarak günlüğe kaydetmeyi öğreneceksiniz, böylece model sunma gibi üretim görevleri için ortamınızda kullanılabilirler.

Python paket modeli bağımlılıklarını günlüğe kaydetme

MLflow,bazı Python ML kitaplıkları için yerel desteğe sahiptir ve burada MLflow bu kitaplıkları kullanan modeller için bağımlılıkları güvenilir bir şekilde günlüğe kaydedebilir. Bkz . yerleşik model tatları.

Örneğin, MLflow mlflow.sklearn modülünde scikit-learn'i destekler ve mlflow.sklearn.log_model komutu sklearn sürümünü günlüğe kaydeder. Aynı durum, bu ML kitaplıklarıyla otomatik olarak dağıtma için de geçerlidir. Ek örnekler için bkz. MLflow github deposu.

ile pip install PACKAGE_NAME==VERSIONyüklenebilen ancak yerleşik MLflow modeli tatlarına sahip olmayan ML kitaplıkları için, mlflow.pyfunc.log_model yöntemini kullanarak bu paketleri günlüğe kaydedebilirsiniz. Gereksinimleri yalnızca yerine tam kitaplık sürümüyle f"nltk=={nltk.__version__}" günlüğe kaydetmeyi nltkunutmayın.

mlflow.pyfunc.log_model aşağıdakiler için günlüğe kaydetmeyi destekler:

  • Python yumurtası veya Python tekerlek dosyaları olarak paketlenmiş genel ve özel kitaplıklar.
  • PyPI üzerindeki genel paketler ve kendi PyPI sunucunuzda özel olarak barındırılan paketler.

MLflow, mlflow.pyfunc.log_model ile bağımlılıkları otomatik olarak çıkarsamaya çalışır. MLflow, mlflow.models.infer_pip_requirements kullanarak bağımlılıkları çıkarsar ve bunları model yapıtı olarak bir requirements.txt dosyaya kaydeder.

Daha eski sürümlerde, MLflow bazen tüm Python gereksinimlerini otomatik olarak tanımlamaz, özellikle de kitaplık yerleşik model tadında değilse. Bu durumlarda, komutundaki extra_pip_requirementslog_model parametresiyle ek bağımlılıklar belirtebilirsiniz. extra_pip_requirements parametresini kullanma örneğine bakın.

Önemli

Ayrıca ve pip_requirements parametreleriyle conda_env tüm gereksinimler kümesinin üzerine yazabilirsiniz, ancak bu işlem MLflow'un otomatik olarak aldığı bağımlılıkları geçersiz kıldığı için genellikle önerilmez. Gereksinimlerin üzerine yazmak için parametresini pip_requirements kullanma örneğine bakın.

Özelleştirilmiş model günlüğü

Daha özelleştirilmiş model günlüğünün gerekli olduğu senaryolar için şunları yapabilirsiniz:

  • Özel bir Python modeli yazın. Bunu yaptığınızda, başlatmayı ve tahmini özelleştirmek için alt sınıfa mlflow.pyfunc.PythonModel ihtiyacınız olur. Bu yaklaşım yalnızca Python modellerini özelleştirmek için uygundur.
  • Özel bir tat yazın. Bu senaryoda, günlüğe kaydetmeyi genel pyfunc türden daha fazla özelleştirebilirsiniz, ancak bunu yapmak için daha fazla çalışma yapılması gerekir.

Özel Python kodu

Bir veya daha fazla .py dosya gibi komutu kullanılarak yüklenebilen %pip install Python kod bağımlılıklarınız olabilir.

Modeli günlüğe kaydederek MLflow'a modelin mlflow.pyfunc.log_model parametresini kullanarak bu bağımlılıkları belirtilen yolda bulabileceğini code_path söyleyebilirsiniz. MLflow, kullanılarak code_path yapıt olarak geçirilen tüm dosyaları veya dizinleri bir kod dizininde modelle birlikte depolar. MLflow, modeli yüklerken bu dosyaları veya dizinleri Python yoluna ekler. Bu yol, aynı dosyalar gibi .py kullanılarak code_pathmodele dahil edilebilen özel Python tekerlek dosyalarıyla da çalışır.

mlflow.pyfunc.log_model( artifact_path=artifact_path,
                         code_path=[filename.py],
                         data_path=data_path,
                         conda_env=conda_env,
                       )

Python olmayan paket modeli bağımlılıklarını günlüğe kaydetme

MLflow Java paketleri, R paketleri ve yerel paketler (Linux paketleri gibi) gibi Python dışı bağımlılıkları otomatik olarak almaz. Bu paketler için ek verileri günlüğe kaydetmeniz gerekir.

  • Bağımlılık listesi: Databricks, python olmayan bu bağımlılıkları belirten modelle bir yapıtın günlüğe kaydedilmesini önerir. Bu basit .txt veya .json dosya olabilir. mlflow.pyfunc.log_model bağımsız değişkenini kullanarak bu ek yapıtı belirtmenize artifacts olanak tanır.
  • Özel paketler: Yukarıdaki özel Python bağımlılıklarında olduğu gibi, paketlerin dağıtım ortamınızda kullanılabilir olduğundan emin olmanız gerekir. Maven Central veya kendi deponuz gibi merkezi bir konumdaki paketler için, konumun puanlama veya sunum zamanında kullanılabilir olduğundan emin olun. Başka bir yerde barındırılmayan özel paketler için, modelle birlikte paketleri yapıt olarak günlüğe kaydedebilirsiniz.

Bağımlılıkları olan modelleri dağıtma

MLflow İzleme Sunucusu veya Model Kayıt Defteri'nden bir model dağıtırken, dağıtım ortamının doğru bağımlılıkların yüklü olduğundan emin olmanız gerekir. En basit yol dağıtım modunuza bağlı olabilir: toplu işlem/akış veya çevrimiçi sunum ve bağımlılık türleri.

Tüm dağıtım modları için Databricks, modelinizi oluşturduğunuz Databricks Runtime'da önceden yüklenmiş çeşitli kitaplıklar bulunduğundan, eğitim sırasında kullandığınız çalışma zamanı sürümünde çıkarım çalıştırmanızı önerir. Databricks'teki MLflow, çalışma zamanı sürümünü MLmodel meta veri dosyasındaki gibi bir databricks_runtime alana otomatik olarak databricks_runtime: 10.2.x-cpu-ml-scala2.12kaydeder.

Çevrimiçi sunum: Databricks modeli sunma

Databricks, MLflow makine öğrenmesi modellerinizin ölçeklenebilir REST API uç noktaları olarak kullanıma sunulduğu Model Sunma sunar.

Dosyadaki requirements.txt Python bağımlılıkları için Databricks ve MLflow, genel PyPI bağımlılıklarına yönelik her şeyi işler. Benzer şekilde, bağımsız değişkenini kullanarak code_path modeli günlüğe kaydederken dosyaları veya Python tekerlek dosyalarını belirttiyseniz.py, MLflow bu bağımlılıkları sizin için otomatik olarak yükler.

Bu model sunma senaryoları için aşağıdakilere bakın:

Dosyadaki requirements.txt Python bağımlılıkları için Databricks ve MLflow, genel PyPI bağımlılıklarına yönelik her şeyi işler. Benzer şekilde, bağımsız değişkenini kullanarak code_path modeli günlüğe kaydederken dosyaları veya Python tekerlek dosyalarını belirttiyseniz.py, MLflow bu bağımlılıkları sizin için otomatik olarak yükler.

Çevrimiçi hizmet: üçüncü taraf sistemler veya Docker kapsayıcıları

Senaryonuz üçüncü taraf hizmet çözümlerine veya kendi Docker tabanlı çözümünüze hizmet gerektiriyorsa modelinizi Docker kapsayıcısı olarak dışarı aktarabilirsiniz.

Databricks, Python bağımlılıklarını otomatik olarak işleyen üçüncü taraf hizmet için aşağıdakileri önerir. Ancak Python olmayan bağımlılıklar için kapsayıcının bunları içerecek şekilde değiştirilmesi gerekir.

Toplu iş ve akış işleri

Toplu iş ve akış puanlaması Databricks İşleri olarak çalıştırılmalıdır. Not defteri işi genellikle yeterlidir ve kod hazırlamanın en basit yolu, puanlama not defteri oluşturmak için Databricks Model Kayıt Defteri'ni kullanmaktır.

Aşağıda, bağımlılıkların uygun şekilde yüklendiğinden ve uygulandığından emin olmak için işlem ve izlenecek adımlar açıklanmaktadır:

  1. Puanlama kümenizi eğitim sırasında kullanılan Databricks Runtime sürümüyle başlatın. Meta veri dosyasından databricks_runtimeMLmodel alanı okuyun ve bu çalışma zamanı sürümüyle bir küme başlatın.

  2. Ardından Python dışı bağımlılıkları yükleyin. Python olmayan bağımlılıklarınızın dağıtım ortamınız tarafından erişilebilir olduğundan emin olmak için şunları yapabilirsiniz:

    • Çıkarım çalıştırmadan önce modelinizin Python olmayan bağımlılıklarını küme yapılandırmasının bir parçası olarak Databricks kümesine el ile yükleyin.
    • Alternatif olarak, bağımlılıkların kümenize yüklenmesini otomatikleştirmek için puanlama işi dağıtımınıza özel mantık yazabilirsiniz. Python dışı bağımlılıklarınızı Python dışı paket modeli bağımlılıklarını günlüğe kaydetme başlığında açıklandığı gibi yapıtlar olarak kaydettiğinizi varsayarsak, bu otomasyon Kitaplıklar API'sini kullanarak kitaplıkları yükleyebilir. Alternatif olarak, bağımlılıkları yüklemek üzere küme kapsamlı bir başlatma betiği oluşturmak için belirli bir kod yazabilirsiniz.
  3. Puanlama işiniz, python bağımlılıklarını iş yürütme ortamına yükler. Databricks'te Model Kayıt Defteri, çıkarım için bir not defteri oluşturmanıza olanak tanır ve bunu sizin için yapar.

    • Puanlama not defteri oluşturmak için Databricks Model Kayıt Defteri'ni kullandığınızda, not defteri modelin requirements.txt dosyasına Python bağımlılıklarını yüklemek için kod içerir. Toplu iş veya akış puanlama için not defteri işiniz için bu kod, model bağımlılıklarının yüklenmesi ve modeliniz için hazır olması için not defteri ortamınızı başlatır.
  4. MLflow, parametresine code_pathlog_modeldahil edilen tüm özel Python kodlarını işler. Bu kod, modelin predict() yöntemi çağrıldığında Python yoluna eklenir. Bunu aşağıdakilerden birini yaparak da el ile yapabilirsiniz:

    • bağımsız değişkeniyle env_manager=['virtualenv'/'conda'] mlflow.pyfunc.spark_udf çağırma.
    • mlflow.pyfunc.get_model_dependencies kullanarak gereksinimleri ayıklama ve %pip yükleme kullanarak yükleme.

    Not

    Bağımsız değişkenini kullanarak code_path modeli günlüğe kaydederken dosyaları veya Python tekerlek dosyalarını belirttiyseniz.py, MLflow bu bağımlılıkları sizin için otomatik olarak yükler.