اجرای گردشهای کاری یادگیری ماشین در Kubeflow

Summarize this content to 400 words in Persian Lang
داده ها فقط بایت هستند تا زمانی که کاری با آن انجام دهیم. چه آن را ساختار دهیم، آن را در معرض دید قرار دهیم، صادر کنیم، آن را بلعیم یا مشاهده کنیم، داده ها باید از جایی آمده باشند و باید به روشی خاص برای مشاهده آن یا استفاده از آن به روشی که ما نیاز داریم آموزش ببینیم.
وقتی صحبت از هوش مصنوعی به میان می آید (صرف نظر از اینکه GenAI باشد یا نه)، همان قوانین اعمال می شود.
یادگیری ماشینی یکی از روشهای آموزش دادهها برای استخراج آنچه از دادههای گفته شده نیاز دارید است.
در این پست وبلاگ، نحوه اجرای گردش کار ML را با Kubeflow، روشی برای اجرای ML در Kubernetes، یاد خواهید گرفت.
Kubeflow چیست؟
Kubeflow یک پلت فرم منبع باز است که به شما امکان می دهد داده ها را بلع، آموزش، آزمایش و مدل سازی کنید. داده ها می توانند هر چیزی از سه ردیف و سه ستون تا هزاران و هزاران مجموعه داده باشند.
حال سوال این است – چرا Kubeflow؟
اول از همه، بسیاری از محیطها در حال اجرا بر روی Kubernetes هستند (نه همه، اما مقدار خوبی) و Kubernetes به شما اجازه میدهد تا ردپای پشتههای برنامهها را کاهش دهید. به عنوان مثال، مهندسان مجبور بودند ماشینهای مجازی را فقط برای اجرای پشته برنامهها بچرخانند. اکنون، مهندسان می توانند یک تصویر ظرف کوچک ایجاد کرده و آن را به عنوان یک ظرف مستقر کنند.
قوانین مشابهی در مورد ML و AI نیز اعمال می شود.
بله، ما همچنان به قدرت GPU و CPU نیاز داریم، اما میتوانیم بارهای کاری را برای اجرا در Pods جدا کنیم تا بتوانیم به جای جعبههای فلزی عظیم یا ماشینهای مجازی که بارهای کاری ML را اجرا میکنند، ردپای کوچکتری داشته باشیم.
اگر می خواهید عمیق تر در “چرا” و “چگونه” غوطه ور شوید، من یک پست وبلاگی در آن نوشتم: https://dev.to/thenjdevopsguy/from-theory-to-installation-kubeflow-10nj
اجزای Kubeflow
Kubeflow از چندین قطعه تشکیل شده است که در اینجا لیست نشده اند (مثلا PyTorch). بهجای ورود به هر مؤلفه، اجازه دهید در مورد بخشهای اصلی Kubeflow صحبت کنیم که برای اجرای یک گردش کار به آن نیاز دارید.
اول، مدل ها وجود دارد. مدل ها مجموعه ای از داده ها هستند که برای یک عمل خاص آموزش داده شده اند. هدف یک مدل این است که حجم زیادی از داده های ساختاریافته را گرفته و آن را به چیزی مفید برای استفاده در زمان بعدی تبدیل کند. «چیز مفید» میتواند هر چیزی باشد، از پیشبینی منابع Kubernetes تا تغذیه اطلاعات واقعی GenAI (بهجای استخراج اطلاعات از جایی مانند نظرات تصادفی در اینترنت).
بعد، آزمایشها. آزمایشها به شما امکان میدهند چندین سناریو از دادههای خود را آزمایش کنید. شما می توانید یک مدل داشته باشید و هر تعداد که مایلید بر روی آن تست انجام دهید. به آن مانند یک فضای کاری/منطقه ذخیره سازی فکر کنید.
در نهایت، اجرا می شود. اجراها همان چیزی هستند که مدل واقعی را اجرا می کنند تا ببینند از انتهای دیگر چه چیزی بیرون می آید. اگر یک مدل ایجاد کنید، انتظار دارید در پایان چیزی اتفاق بیفتد. Run تضمین می کند که همانطور که انتظار داشتید کار می کند. مانند اجرای کد به آن فکر کنید. شما کد می نویسید و سپس آن را اجرا می کنید. گاهی اوقات پس از اجرای آن، آن چیزی که انتظار داشتید نیست.
در مرحله بعد، بیایید نحوه اجرای Models، Experiments و Run را ببینیم.
در حال اجرا خطوط لوله
سه مرحله برای اجرای Models وجود دارد:
خط لوله را ایجاد کنید.
یک آزمایش ایجاد کنید.
اجرا ایجاد کنید.
اولین قدم ایجاد یک خط لوله است. Pipeline کدی است که شما یا شخص دیگری برای ایجاد یک مدل نوشته اید. Pipeline اجرای مدل را خودکار می کند. به آن مانند یک خط لوله CICD فکر کنید.
برای ایجاد خط لوله، به مقداری کد نیاز دارید.
خط لوله را ایجاد کنید
کتابخانه Kubeflow Python را نصب کنید.
pip install kfp
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
💡 اگر پایتون را نصب نکرده اید، این مستندات را بررسی کنید: https://www.python.org/downloads/
یک اسکریپت پایتون را برای ایجاد یک خط لوله مبتنی بر YAML اجرا کنید.
from kfp import dsl
@dsl.component
def say_hello(name: str) -> str:
hello_text = f’Hello, {name}!’
print(hello_text)
return hello_text
@dsl.pipeline
def hello_pipeline(recipient: str) -> str:
hello_task = say_hello(name=recipient)
return hello_task.output
compiler.Compiler().compile(hello_pipeline, ‘pipeline.yaml’)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کد به معنای منطقی آن ساده است. این فقط به شما این امکان را می دهد که نام یک نفر را در ترمینال خروجی بگیرید. اگر برای اولین بار است که یک مدل می سازید، هیچ چیز خیلی پیچیده نیست.
شما باید یک پیکربندی YAML مشابه پیکربندی زیر ببینید. در فهرست فعلی شما ذخیره می شود و فایل نامگذاری می شود pipeline.yaml.
# PIPELINE DEFINITION
# Name: hello-pipeline
# Inputs:
# recipient: str
# Outputs:
# Output: str
components:
comp-say-hello:
executorLabel: exec-say-hello
inputDefinitions:
parameters:
name:
parameterType: STRING
outputDefinitions:
parameters:
Output:
parameterType: STRING
deploymentSpec:
executors:
exec-say-hello:
container:
args:
– –executor_input
– ‘{{$}}’
– –function_to_execute
– say_hello
command:
– sh
– -c
– “\nif ! [ -x \”$(command -v pip)\” ]; then\n python3 -m ensurepip ||\
\ python3 -m ensurepip –user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\
\ python3 -m pip install –quiet –no-warn-script-location ‘kfp==2.7.0’\
\ ‘–no-deps’ ‘typing-extensions>=3.7.4,\”3.9\”‘ && \”\
$0\” \”$@\”\n”
– sh
– -ec
– ‘program_path=$(mktemp -d)
printf “%s” “$0” > “$program_path/ephemeral_component.py”
_KFP_RUNTIME=true python3 -m kfp.dsl.executor_main –component_module_path “$program_path/ephemeral_component.py” “$@”
‘
– “\nimport kfp\nfrom kfp import dsl\nfrom kfp.dsl import *\nfrom typing import\
\ *\n\ndef say_hello(name: str) -> str:\n hello_text = f’Hello, {name}!’\n\
\ print(hello_text)\n return hello_text\n\n”
image: python:3.7
pipelineInfo:
name: hello-pipeline
root:
dag:
outputs:
parameters:
Output:
valueFromParameter:
outputParameterKey: Output
producerSubtask: say-hello
tasks:
say-hello:
cachingOptions:
enableCache: true
componentRef:
name: comp-say-hello
inputs:
parameters:
name:
componentInputParameter: recipient
taskInfo:
name: say-hello
inputDefinitions:
parameters:
recipient:
parameterType: STRING
outputDefinitions:
parameters:
Output:
parameterType: STRING
schemaVersion: 2.1.0
sdkVersion: kfp-2.7.0
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خط لوله را ایجاد کنید
خط لوله YAML را که ایجاد کردید بردارید و آن را در Kubeflow آپلود کنید.
به خط لوله خود یک نام بدهید و آن را اضافه کنید pipeline.yaml در یک فایل آپلود کنید بخش. پس از آن روی آبی کلیک کنید ايجاد كردن دکمه.
ایجاد یک آزمایش
اکنون که Pipeline بارگذاری شده است، می توانید یک آزمایش ایجاد کنید.
روی آبی کلیک کنید + آزمایش ایجاد کنید دکمه.
به آزمایش یک نام بدهید و روی آبی کلیک کنید بعد دکمه.
در صفحه بعدی، به طور خودکار به صفحه Runs آورده می شوید. آزمایشی را که ایجاد کردید انتخاب کنید.
زیر پارامترها را اجرا کنید بخش، شما می توانید هر نامی که دوست دارید قرار دهید. این بخشی از اسکریپت پایتون است که یک پارامتر می خواهد.
پس از تکمیل، روی آبی کلیک کنید شروع کنید دکمه.
باید آزمایش را در حال اجرا یا تکمیل ببینید.
اجراها را ایجاد کنید
همچنین در صورت تمایل می توانید اجرای دیگری ایجاد کنید.
به صفحه Runs بروید و روی آبی کلیک کنید + اجرا را ایجاد کنید دکمه.
همان صفحهای را میبینید که قبلاً بعد از ایجاد یک آزمایش دیدهاید. یک نام جدید برای Run جدید وارد کنید و همان Experiment را انتخاب کنید.
اکنون باید Run جدید را ببینید.
داده ها فقط بایت هستند تا زمانی که کاری با آن انجام دهیم. چه آن را ساختار دهیم، آن را در معرض دید قرار دهیم، صادر کنیم، آن را بلعیم یا مشاهده کنیم، داده ها باید از جایی آمده باشند و باید به روشی خاص برای مشاهده آن یا استفاده از آن به روشی که ما نیاز داریم آموزش ببینیم.
وقتی صحبت از هوش مصنوعی به میان می آید (صرف نظر از اینکه GenAI باشد یا نه)، همان قوانین اعمال می شود.
یادگیری ماشینی یکی از روشهای آموزش دادهها برای استخراج آنچه از دادههای گفته شده نیاز دارید است.
در این پست وبلاگ، نحوه اجرای گردش کار ML را با Kubeflow، روشی برای اجرای ML در Kubernetes، یاد خواهید گرفت.
Kubeflow چیست؟
Kubeflow یک پلت فرم منبع باز است که به شما امکان می دهد داده ها را بلع، آموزش، آزمایش و مدل سازی کنید. داده ها می توانند هر چیزی از سه ردیف و سه ستون تا هزاران و هزاران مجموعه داده باشند.
حال سوال این است – چرا Kubeflow؟
اول از همه، بسیاری از محیطها در حال اجرا بر روی Kubernetes هستند (نه همه، اما مقدار خوبی) و Kubernetes به شما اجازه میدهد تا ردپای پشتههای برنامهها را کاهش دهید. به عنوان مثال، مهندسان مجبور بودند ماشینهای مجازی را فقط برای اجرای پشته برنامهها بچرخانند. اکنون، مهندسان می توانند یک تصویر ظرف کوچک ایجاد کرده و آن را به عنوان یک ظرف مستقر کنند.
قوانین مشابهی در مورد ML و AI نیز اعمال می شود.
بله، ما همچنان به قدرت GPU و CPU نیاز داریم، اما میتوانیم بارهای کاری را برای اجرا در Pods جدا کنیم تا بتوانیم به جای جعبههای فلزی عظیم یا ماشینهای مجازی که بارهای کاری ML را اجرا میکنند، ردپای کوچکتری داشته باشیم.
اگر می خواهید عمیق تر در “چرا” و “چگونه” غوطه ور شوید، من یک پست وبلاگی در آن نوشتم: https://dev.to/thenjdevopsguy/from-theory-to-installation-kubeflow-10nj
اجزای Kubeflow
Kubeflow از چندین قطعه تشکیل شده است که در اینجا لیست نشده اند (مثلا PyTorch). بهجای ورود به هر مؤلفه، اجازه دهید در مورد بخشهای اصلی Kubeflow صحبت کنیم که برای اجرای یک گردش کار به آن نیاز دارید.
اول، مدل ها وجود دارد. مدل ها مجموعه ای از داده ها هستند که برای یک عمل خاص آموزش داده شده اند. هدف یک مدل این است که حجم زیادی از داده های ساختاریافته را گرفته و آن را به چیزی مفید برای استفاده در زمان بعدی تبدیل کند. «چیز مفید» میتواند هر چیزی باشد، از پیشبینی منابع Kubernetes تا تغذیه اطلاعات واقعی GenAI (بهجای استخراج اطلاعات از جایی مانند نظرات تصادفی در اینترنت).
بعد، آزمایشها. آزمایشها به شما امکان میدهند چندین سناریو از دادههای خود را آزمایش کنید. شما می توانید یک مدل داشته باشید و هر تعداد که مایلید بر روی آن تست انجام دهید. به آن مانند یک فضای کاری/منطقه ذخیره سازی فکر کنید.
در نهایت، اجرا می شود. اجراها همان چیزی هستند که مدل واقعی را اجرا می کنند تا ببینند از انتهای دیگر چه چیزی بیرون می آید. اگر یک مدل ایجاد کنید، انتظار دارید در پایان چیزی اتفاق بیفتد. Run تضمین می کند که همانطور که انتظار داشتید کار می کند. مانند اجرای کد به آن فکر کنید. شما کد می نویسید و سپس آن را اجرا می کنید. گاهی اوقات پس از اجرای آن، آن چیزی که انتظار داشتید نیست.
در مرحله بعد، بیایید نحوه اجرای Models، Experiments و Run را ببینیم.
در حال اجرا خطوط لوله
سه مرحله برای اجرای Models وجود دارد:
- خط لوله را ایجاد کنید.
- یک آزمایش ایجاد کنید.
- اجرا ایجاد کنید.
اولین قدم ایجاد یک خط لوله است. Pipeline کدی است که شما یا شخص دیگری برای ایجاد یک مدل نوشته اید. Pipeline اجرای مدل را خودکار می کند. به آن مانند یک خط لوله CICD فکر کنید.
برای ایجاد خط لوله، به مقداری کد نیاز دارید.
خط لوله را ایجاد کنید
- کتابخانه Kubeflow Python را نصب کنید.
pip install kfp
💡 اگر پایتون را نصب نکرده اید، این مستندات را بررسی کنید: https://www.python.org/downloads/
- یک اسکریپت پایتون را برای ایجاد یک خط لوله مبتنی بر YAML اجرا کنید.
from kfp import dsl
@dsl.component
def say_hello(name: str) -> str:
hello_text = f'Hello, {name}!'
print(hello_text)
return hello_text
@dsl.pipeline
def hello_pipeline(recipient: str) -> str:
hello_task = say_hello(name=recipient)
return hello_task.output
compiler.Compiler().compile(hello_pipeline, 'pipeline.yaml')
کد به معنای منطقی آن ساده است. این فقط به شما این امکان را می دهد که نام یک نفر را در ترمینال خروجی بگیرید. اگر برای اولین بار است که یک مدل می سازید، هیچ چیز خیلی پیچیده نیست.
شما باید یک پیکربندی YAML مشابه پیکربندی زیر ببینید. در فهرست فعلی شما ذخیره می شود و فایل نامگذاری می شود pipeline.yaml
.
# PIPELINE DEFINITION
# Name: hello-pipeline
# Inputs:
# recipient: str
# Outputs:
# Output: str
components:
comp-say-hello:
executorLabel: exec-say-hello
inputDefinitions:
parameters:
name:
parameterType: STRING
outputDefinitions:
parameters:
Output:
parameterType: STRING
deploymentSpec:
executors:
exec-say-hello:
container:
args:
- --executor_input
- '{{$}}'
- --function_to_execute
- say_hello
command:
- sh
- -c
- "\nif ! [ -x \"$(command -v pip)\" ]; then\n python3 -m ensurepip ||\
\ python3 -m ensurepip --user || apt-get install python3-pip\nfi\n\nPIP_DISABLE_PIP_VERSION_CHECK=1\
\ python3 -m pip install --quiet --no-warn-script-location 'kfp==2.7.0'\
\ '--no-deps' 'typing-extensions>=3.7.4,\"3.9\"' && \"\
$0\" \"$@\"\n"
- sh
- -ec
- 'program_path=$(mktemp -d)
printf "%s" "$0" > "$program_path/ephemeral_component.py"
_KFP_RUNTIME=true python3 -m kfp.dsl.executor_main --component_module_path "$program_path/ephemeral_component.py" "$@"
'
- "\nimport kfp\nfrom kfp import dsl\nfrom kfp.dsl import *\nfrom typing import\
\ *\n\ndef say_hello(name: str) -> str:\n hello_text = f'Hello, {name}!'\n\
\ print(hello_text)\n return hello_text\n\n"
image: python:3.7
pipelineInfo:
name: hello-pipeline
root:
dag:
outputs:
parameters:
Output:
valueFromParameter:
outputParameterKey: Output
producerSubtask: say-hello
tasks:
say-hello:
cachingOptions:
enableCache: true
componentRef:
name: comp-say-hello
inputs:
parameters:
name:
componentInputParameter: recipient
taskInfo:
name: say-hello
inputDefinitions:
parameters:
recipient:
parameterType: STRING
outputDefinitions:
parameters:
Output:
parameterType: STRING
schemaVersion: 2.1.0
sdkVersion: kfp-2.7.0
خط لوله را ایجاد کنید
- خط لوله YAML را که ایجاد کردید بردارید و آن را در Kubeflow آپلود کنید.
- به خط لوله خود یک نام بدهید و آن را اضافه کنید
pipeline.yaml
در یک فایل آپلود کنید بخش. پس از آن روی آبی کلیک کنید ايجاد كردن دکمه.
ایجاد یک آزمایش
اکنون که Pipeline بارگذاری شده است، می توانید یک آزمایش ایجاد کنید.
- روی آبی کلیک کنید + آزمایش ایجاد کنید دکمه.
- به آزمایش یک نام بدهید و روی آبی کلیک کنید بعد دکمه.
- در صفحه بعدی، به طور خودکار به صفحه Runs آورده می شوید. آزمایشی را که ایجاد کردید انتخاب کنید.
زیر پارامترها را اجرا کنید بخش، شما می توانید هر نامی که دوست دارید قرار دهید. این بخشی از اسکریپت پایتون است که یک پارامتر می خواهد.
پس از تکمیل، روی آبی کلیک کنید شروع کنید دکمه.
باید آزمایش را در حال اجرا یا تکمیل ببینید.
اجراها را ایجاد کنید
همچنین در صورت تمایل می توانید اجرای دیگری ایجاد کنید.
- به صفحه Runs بروید و روی آبی کلیک کنید + اجرا را ایجاد کنید دکمه.
- همان صفحهای را میبینید که قبلاً بعد از ایجاد یک آزمایش دیدهاید. یک نام جدید برای Run جدید وارد کنید و همان Experiment را انتخاب کنید.
اکنون باید Run جدید را ببینید.