MLflow সম্পূর্ণ মেশিন লার্নিং লাইফসাইকেল পরিচালনা করার জন্য ডিজাইন করা একটি ওপেন সোর্স প্ল্যাটফর্ম। Databricks তাদের নিজস্ব মেশিন লার্নিং ডেভেলপমেন্ট এবং ডিপ্লোয়মেন্ট প্রক্রিয়ার সম্মুখীন হওয়া চ্যালেঞ্জ মোকাবেলা করার জন্য একটি অভ্যন্তরীণ প্রকল্প হিসেবে এটি তৈরি করেছে। MLflow পরে জুন 2018 এ একটি ওপেন-সোর্স প্রকল্প হিসাবে প্রকাশিত হয়েছিল।
সম্পূর্ণ জীবনচক্র পরিচালনার জন্য একটি সরঞ্জাম হিসাবে, MLflow নিম্নলিখিত উপাদান ধারণ করে।
এই সমস্ত ক্ষমতাগুলি একটি ডেভেলপমেন্ট মেশিনে ইনস্টল করা সম্ভব যাতে ইঞ্জিনিয়াররা তাদের হৃদয়ের বিষয়বস্তুতে কোনও উত্পাদন ইনস্টলেশনের বিষয়ে উদ্বেগ ছাড়াই পরীক্ষা করতে পারে।
MLflow ইনস্টল এবং সেটআপ করতে ব্যবহৃত সমস্ত ফাইল আমাদের Github সংগ্রহস্থলে পাওয়া যাবে।
MLFlow ডকুমেন্টেশন MLFlow ইনস্টল করার জন্য 6টির কম বিকল্পের তালিকা করে না। এটি ওভারকিলের মতো মনে হতে পারে, তবে এই বিকল্পগুলি একটি ডাটাবেসের জন্য বিভিন্ন পছন্দ এবং বিভিন্ন স্তরের নেটওয়ার্ক জটিলতার মিটমাট করে।
যে বিকল্পটি একটি প্রতিষ্ঠানের জন্য সবচেয়ে উপযুক্ত যেটিতে একাধিক দল রয়েছে বড় ডেটাসেট এবং বিল্ডিং মডেলগুলি ব্যবহার করে যা নিজেরাই বেশ বড় হতে পারে তা নীচে দেখানো হয়েছে। এই বিকল্পটির জন্য তিনটি সার্ভারের সেটআপ প্রয়োজন - একটি ট্র্যাকিং সার্ভার, একটি PostgreSQL ডাটাবেস এবং একটি S3 অবজেক্ট স্টোর - আমাদের বাস্তবায়ন MinIO ব্যবহার করবে৷
ট্র্যাকিং সার্ভার হল এমএলফ্লো কার্যকারিতা অ্যাক্সেস করার জন্য ইঞ্জিনিয়ারের ডেভেলপমেন্ট মেশিন থেকে একটি একক এন্ট্রি পয়েন্ট। (এর নাম দিয়ে প্রতারিত হবেন না - এতে উপরে তালিকাভুক্ত সমস্ত উপাদান রয়েছে - ট্র্যাকিং, মডেল, প্রকল্প এবং সংগ্রহস্থল।) ট্র্যাকিং সার্ভার সত্তা সঞ্চয় করতে PostgreSQL ব্যবহার করে। সত্তা হল রান, প্যারামিটার, মেট্রিক্স, ট্যাগ, নোট এবং মেটাডেটা। (পরে চলে আরও।) আমাদের বাস্তবায়নের ট্র্যাকিং সার্ভারটি শিল্পকর্ম সংরক্ষণ করতে MinIO-তে অ্যাক্সেস করে। আর্টিফ্যাক্টের উদাহরণ হল মডেল, ডেটাসেট এবং কনফিগারেশন ফাইল।
আজকাল ইঞ্জিনিয়ারদের কাছে উপলব্ধ আধুনিক টুলিং সম্পর্কে যা ভাল তা হল যে আপনি কন্টেইনার ব্যবহার করে - টুলিং পছন্দ এবং নেটওয়ার্ক সংযোগ সহ - একটি উত্পাদন পরিবেশ অনুকরণ করতে পারেন। এটাই আমি এই পোস্টে দেখাব। উপরে বর্ণিত সার্ভারগুলিকে একটি পাত্রে চলমান পরিষেবা হিসাবে ইনস্টল করতে কীভাবে ডকার কম্পোজ ব্যবহার করবেন তা আমি দেখাব। অতিরিক্তভাবে, MLflow-এর কনফিগারেশন এমনভাবে সেট আপ করা হয়েছে যে আপনি চাইলে MinIO-এর একটি বিদ্যমান উদাহরণ ব্যবহার করতে পারেন। এই পোস্টে, আমি দেখাব কিভাবে MinIO-এর একটি নতুন দৃষ্টান্ত স্থাপন করা যায়, কিন্তু আমাদের Github সংগ্রহস্থলের ফাইলগুলিতে একটি 'ডকার-কম্পোজ' ফাইল রয়েছে যা দেখায় কিভাবে MinIO-এর বিদ্যমান উদাহরণের সাথে সংযোগ করতে হয়।
নীচে সমস্ত কিছুর একটি তালিকা রয়েছে যা ইনস্টল করতে হবে। এই তালিকায় এমন সার্ভার রয়েছে যা কনটেইনারগুলিতে পরিষেবা হয়ে যাবে (MinIO, Postgres, এবং MLFlow), সেইসাথে আপনার প্রয়োজন হবে এমন SDKগুলি (MinIO এবং MLflow)৷
ডকার ডেস্কটপ
ডকার কম্পোজের মাধ্যমে MLFlow ট্র্যাকিং সার্ভার
ডকার কম্পোজের মাধ্যমে MinIO সার্ভার
পোস্টগ্রেসএসকিউএল ডকার কম্পোজের মাধ্যমে
পিপ ইনস্টলের মাধ্যমে MLFlow SDK
পিপ ইনস্টলের মাধ্যমে MinIO SDK
ডকার ডেস্কটপ দিয়ে শুরু করা যাক, যা আমাদের ডকার কম্পোজ পরিষেবাগুলির হোস্ট হিসাবে কাজ করবে।
আপনি ডকারের সাইটে আপনার অপারেটিং সিস্টেমের জন্য উপযুক্ত ইনস্টলেশন খুঁজে পেতে পারেন। আপনি যদি ম্যাকে ডকার ডেস্কটপ ইনস্টল করেন, তাহলে আপনার ম্যাক যে চিপ ব্যবহার করছে তা আপনাকে জানতে হবে — অ্যাপল বা ইন্টেল। আপনি আপনার ম্যাকের উপরের বাম কোণে অ্যাপল আইকনে ক্লিক করে এবং "এই ম্যাক সম্পর্কে" মেনু বিকল্পটি ক্লিক করে এটি নির্ধারণ করতে পারেন।
আমরা এখন আমাদের পরিষেবাগুলি ইনস্টল করার জন্য প্রস্তুত৷
MLFLow ট্র্যাকিং সার্ভার, PostgresSQL এবং MinIO নীচে দেখানো ডকার কম্পোজ ফাইল ব্যবহার করে পরিষেবা হিসাবে ইনস্টল করা হবে।
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
কিছু কিছু ভুল হলে সমস্যা সমাধানে সাহায্য করবে এমন কয়েকটি বিষয় লক্ষণীয়। প্রথমত, MinIO এবং PostgreSQL উভয়ই ডেটা সঞ্চয় করতে স্থানীয় ফাইল সিস্টেম ব্যবহার করছে। PostgreSQL এর জন্য, এটি হল `db_data` ফোল্ডার এবং MinIO এর জন্য, এটি `minio_data` ফোল্ডার। আপনি যদি কখনও একটি পরিষ্কার ইনস্টলেশন দিয়ে শুরু করতে চান তবে এই ফোল্ডারগুলি মুছুন।
পরবর্তী, এই ডকার কম্পোজ ফাইলটি কনফিগারেশন চালিত। উদাহরণ স্বরূপ, PostgreSQL ডাটাবেসের নামকে `mlflow`-এ হার্ড কোডিং করার পরিবর্তে, নামটি ডকার কম্পোজ ফাইলে নিম্নলিখিত সিনট্যাক্স ব্যবহার করে নিচে দেখানো `config.env` ফাইল থেকে এসেছে - `${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
এই পরিষেবাগুলির জন্য প্রয়োজনীয় সমস্ত পরিবেশ ভেরিয়েবল এই ফাইলে সেট আপ করা হয়েছে৷ এই কনফিগারেশন ফাইলে এই পরিষেবাগুলির একে অপরের সাথে কথা বলার জন্য প্রয়োজনীয় তথ্যও রয়েছে৷ লক্ষ্য করুন যে এটি এনভায়রনমেন্ট ভেরিয়েবলের ব্যবহার যা MLFlow ট্র্যাকিং সার্ভারকে জানায় কিভাবে MinIO অ্যাক্সেস করতে হয়। অন্য কথায়, URL (পোর্ট নম্বর সহ), অ্যাক্সেস কী, গোপন অ্যাক্সেস কী এবং বালতি। এটি আমাকে ডকার কম্পোজ ব্যবহার করার বিষয়ে আমার চূড়ান্ত এবং সবচেয়ে গুরুত্বপূর্ণ পয়েন্টে নিয়ে যায় - আপনি যখন প্রথমবার এই পরিষেবাগুলি নিয়ে আসবেন, MLflow ট্র্যাকিং পরিষেবাগুলি কাজ করবে না কারণ আপনাকে প্রথমে MinIO UI-তে যেতে হবে, আপনার কীগুলি পেতে হবে এবং বালতি তৈরি করতে হবে যে ট্র্যাকিং পরিষেবা নিদর্শন সংরক্ষণ করতে ব্যবহার করবে.
এখন এটা করা যাক. নীচের কমান্ডটি ব্যবহার করে প্রথমবারের জন্য পরিষেবাগুলি শুরু করুন।
docker-compose --env-file config.env up -d --build
নিশ্চিত করুন যে আপনি এই কমান্ডটি একই ডিরেক্টরিতে চালান যেখানে আপনার ডকার কম্পোজ ফাইলটি অবস্থিত।
এখন আমরা আমাদের কী পেতে পারি এবং MinIO UI ব্যবহার করে আমাদের বালতি তৈরি করতে পারি।
আপনার ব্রাউজার থেকে, `localhost:9001` এ যান। আপনি যদি `ডকার-কম্পোজ` ফাইলে MinIO কনসোলের ঠিকানার জন্য একটি ভিন্ন পোর্ট উল্লেখ করেন, তাহলে পরিবর্তে সেই পোর্টটি ব্যবহার করুন। রুট ব্যবহারকারী এবং পাসওয়ার্ড ব্যবহার করে সাইন ইন করুন `config.env` ফাইলে।
একবার আপনি সাইন ইন করলে, অ্যাক্সেস কী ট্যাবে নেভিগেট করুন এবং অ্যাক্সেস কী তৈরি করুন বোতামে ক্লিক করুন।
এটি আপনাকে অ্যাক্সেস কী তৈরি পৃষ্ঠায় নিয়ে যাবে।
আপনি তৈরি বোতামে ক্লিক না করা পর্যন্ত আপনার অ্যাক্সেস কী এবং গোপন কী সংরক্ষণ করা হয় না। এটি সম্পন্ন না হওয়া পর্যন্ত এই পৃষ্ঠা থেকে দূরে নেভিগেট করবেন না. এই পর্দা থেকে কী অনুলিপি সম্পর্কে চিন্তা করবেন না. একবার আপনি তৈরি করুন বোতামে ক্লিক করলে, আপনাকে আপনার ফাইল সিস্টেমে (একটি JSON ফাইলে) কীগুলি ডাউনলোড করার বিকল্প দেওয়া হবে। আপনি যদি কাঁচা ডেটা পরিচালনা করতে MinIO SDK ব্যবহার করতে চান তাহলে এই পৃষ্ঠায় থাকাকালীন আরেকটি অ্যাক্সেস কী এবং গোপন কী তৈরি করুন৷
এরপরে, `mlflow` নামে একটি বালতি তৈরি করুন। এটি সোজা, বালতি ট্যাবে যান এবং `বাকেট তৈরি করুন` বোতামে ক্লিক করুন।
একবার আপনার কীগুলি হয়ে গেলে এবং আপনি আপনার বালতি তৈরি করে নিলে, আপনি কনটেইনারগুলি বন্ধ করে, `config.env` আপডেট করে এবং তারপরে কন্টেইনারগুলি পুনরায় চালু করে পরিষেবাগুলি সেট আপ করা শেষ করতে পারেন। নীচের কমান্ডটি আপনার কন্টেইনারগুলিকে থামিয়ে সরিয়ে দেবে।
docker-compose down
নতুন করে শুরু:
docker-compose --env-file config.env up -d --build
এর পরের MLflow UI শুরু করা যাক এবং নিশ্চিত করুন যে সবকিছু কাজ করছে।
`localhost:5000`-এ নেভিগেট করুন। আপনার MLflow UI দেখতে হবে।
সমস্ত ট্যাব অন্বেষণ করতে কিছু সময় নিন। আপনি যদি MLflow-এ নতুন হন, তাহলে রান এবং এক্সপেরিমেন্টের ধারণার সাথে পরিচিত হন।
MLflow Python প্যাকেজ একটি সাধারণ `pip` ইনস্টল। আমি পাইথন ভার্চুয়াল পরিবেশে এটি ইনস্টল করার পরামর্শ দিই।
pip install mlflow
MLflow লাইব্রেরি তালিকাবদ্ধ করে ইনস্টলেশনটি দুবার চেক করুন।
pip list | grep mlflow
আপনি নীচের লাইব্রেরি দেখতে হবে.
mlflow 2.5.0
MLflow বৈশিষ্ট্যগুলির সুবিধা নিতে আপনাকে সরাসরি MinIO অ্যাক্সেস করার দরকার নেই - MLflow SDK আমরা উপরে সেট আপ করা MinIO-এর উদাহরণের সাথে ইন্টারফেস করবে। যাইহোক, আপনি এমএলফ্লোতে দেওয়ার আগে ডেটা পরিচালনা করতে MinIO-এর এই উদাহরণের সাথে সরাসরি ইন্টারফেস করতে চাইতে পারেন। MinIO সব ধরণের অসংগঠিত ডেটা সঞ্চয় করার একটি দুর্দান্ত উপায়। MinIO অন্তর্নিহিত হার্ডওয়্যারের সম্পূর্ণ ব্যবহার করে, যাতে আপনি স্কেল বা কর্মক্ষমতা নিয়ে চিন্তা না করে আপনার প্রয়োজনীয় সমস্ত কাঁচা ডেটা সংরক্ষণ করতে পারেন৷ MinIO একাধিক অবস্থানে ডেটা সিঙ্ক্রোনাইজ রাখতে বালতি প্রতিলিপি বৈশিষ্ট্য অন্তর্ভুক্ত করে। এছাড়াও, একদিন AI নিয়ন্ত্রিত হবে; যখন এই দিনটি আসে, তখন আপনার প্রয়োজন হবে MinIO-এর এন্টারপ্রাইজ বৈশিষ্ট্য ( অবজেক্ট লকিং , ভার্সনিং , এনক্রিপশন , এবং লিগ্যাল লক ) যাতে আপনার ডেটা বিশ্রামে সুরক্ষিত থাকে এবং আপনি ভুলবশত এমন কিছু মুছে ফেলবেন না যা একটি নিয়ন্ত্রক সংস্থা অনুরোধ করতে পারে।
আপনি যদি ভার্চুয়াল পরিবেশে MLflow Python প্যাকেজ ইনস্টল করেন, একই পরিবেশে MinIO ইনস্টল করুন।
pip install minio
ইনস্টলেশনটি ডাবল চেক করুন।
pip list | grep minio
এটি নিশ্চিত করবে যে Minio লাইব্রেরি ইনস্টল করা হয়েছে এবং আপনি যে সংস্করণটি ব্যবহার করছেন সেটি প্রদর্শন করবে।
minio 7.1.15
এই পোস্টটি একটি ডেভেলপমেন্ট মেশিনে MLflow এবং MinIO সেট আপ করার জন্য একটি সহজে অনুসরণযোগ্য রেসিপি প্রদান করেছে। লক্ষ্য ছিল MLflow সার্ভার এবং ডকার-কম্পোজ কনফিগারেশন গবেষণা করার সময় এবং প্রচেষ্টা বাঁচানো।
এই রেসিপিটি সঠিক রাখার জন্য সর্বাত্মক প্রচেষ্টা করা হয়েছিল। আপনি যদি কোনো সমস্যায় পড়েন, তাহলে [email protected] এ আমাদের একটি লাইন ড্রপ করে অথবা আমাদের সাধারণ স্ল্যাক চ্যানেলে আলোচনায় যোগ দিয়ে দয়া করে আমাদের জানান।
আপনি MLflow এবং MinIO এর সাথে কোডিং এবং প্রশিক্ষণ মডেল শুরু করতে প্রস্তুত।
এছাড়াও এখানে প্রকাশিত.