ভূমিকা
এই নথিটি পেঙ্গুইন টেমপ্লেট ব্যবহার করে আপনার নিজস্ব ডেটাসেটের জন্য একটি টেনসরফ্লো এক্সটেন্ডেড (টিএফএক্স) পাইপলাইন তৈরি করার নির্দেশনা প্রদান করবে যা টিএফএক্স পাইথন প্যাকেজের সাথে সরবরাহ করা হয়েছে। তৈরি করা পাইপলাইন প্রাথমিকভাবে Palmer Penguins ডেটাসেট ব্যবহার করবে, কিন্তু আমরা আপনার ডেটাসেটের জন্য পাইপলাইনটি রূপান্তরিত করব।
পূর্বশর্ত
- লিনাক্স / ম্যাকওএস
- পাইথন 3.6-3.8
- জুপিটার নোটবুক
ধাপ 1. আপনার প্রকল্প ডিরেক্টরিতে পূর্বনির্ধারিত টেমপ্লেটটি অনুলিপি করুন।
এই ধাপে, আমরা TFX-এ পেঙ্গুইন টেমপ্লেট থেকে ফাইল কপি করে একটি কার্যকরী পাইপলাইন প্রকল্প ডিরেক্টরি এবং ফাইল তৈরি করব। আপনি এটিকে আপনার TFX পাইপলাইন প্রকল্পের জন্য একটি ভারা হিসেবে ভাবতে পারেন।
পিপ আপডেট করুন
আমরা যদি Colab-এ চালাই তাহলে আমাদের নিশ্চিত হওয়া উচিত যে আমাদের কাছে Pip-এর লেটেস্ট ভার্সন আছে। স্থানীয় সিস্টেম অবশ্যই আলাদাভাবে আপডেট করা যেতে পারে।
import sys
if 'google.colab' in sys.modules:
!pip install --upgrade pip
প্রয়োজনীয় প্যাকেজ ইনস্টল করুন
প্রথমে, TFX এবং TensorFlow মডেল বিশ্লেষণ (TFMA) ইনস্টল করুন।
pip install -U tfx tensorflow-model-analysis
আসুন TFX এর সংস্করণগুলি পরীক্ষা করি।
import tensorflow as tf
import tensorflow_model_analysis as tfma
import tfx
print('TF version: {}'.format(tf.__version__))
print('TFMA version: {}'.format(tfma.__version__))
print('TFX version: {}'.format(tfx.__version__))
TF version: 2.7.1 TFMA version: 0.37.0 TFX version: 1.6.0
আমরা একটি পাইপলাইন তৈরি করতে প্রস্তুত।
আপনার পরিবেশের জন্য উপযুক্ত গন্তব্যে PROJECT_DIR সেট করুন। ডিফল্ট মান হল ~/imported/${PIPELINE_NAME} যা Google Cloud AI Platform Notebook পরিবেশের জন্য উপযুক্ত৷
আপনি নীচের PIPELINE_NAME পরিবর্তন করে আপনার পাইপলাইনের একটি ভিন্ন নাম দিতে পারেন৷ এটি সেই প্রজেক্ট ডিরেক্টরির নামও হয়ে যাবে যেখানে আপনার ফাইলগুলি রাখা হবে।
PIPELINE_NAME="my_pipeline"
import os
# Set this project directory to your new tfx pipeline project.
PROJECT_DIR=os.path.join(os.path.expanduser("~"), "imported", PIPELINE_NAME)
টেমপ্লেট ফাইল কপি করুন।
TFX টিএফএক্স পাইথন প্যাকেজের সাথে penguin টেমপ্লেট অন্তর্ভুক্ত করে। penguin টেমপ্লেটে আপনার ডেটাসেটকে পাইপলাইনে আনার জন্য অনেক নির্দেশনা রয়েছে যা এই টিউটোরিয়ালটির উদ্দেশ্য।
tfx template copy CLI কমান্ড আপনার প্রজেক্ট ডিরেক্টরিতে পূর্বনির্ধারিত টেমপ্লেট ফাইল কপি করে।
# Set `PATH` to include user python binary directory and a directory containing `skaffold`.
PATH=%env PATH
%env PATH={PATH}:/home/jupyter/.local/bin
!tfx template copy \
--pipeline-name={PIPELINE_NAME} \
--destination-path={PROJECT_DIR} \
--model=penguin
env: PATH=/tmpfs/src/tf_docs_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin:/opt/android-studio/current/bin:/usr/local/go/bin:/usr/local/go/packages/bin:/opt/kubernetes/client/bin/:/home/kbuilder/.local/bin:/home/jupyter/.local/bin CLI Copying penguin pipeline template kubeflow_runner.py -> /home/kbuilder/imported/my_pipeline/kubeflow_runner.py configs.py -> /home/kbuilder/imported/my_pipeline/pipeline/configs.py pipeline.py -> /home/kbuilder/imported/my_pipeline/pipeline/pipeline.py __init__.py -> /home/kbuilder/imported/my_pipeline/pipeline/__init__.py model.py -> /home/kbuilder/imported/my_pipeline/models/model.py features.py -> /home/kbuilder/imported/my_pipeline/models/features.py features_test.py -> /home/kbuilder/imported/my_pipeline/models/features_test.py preprocessing_test.py -> /home/kbuilder/imported/my_pipeline/models/preprocessing_test.py preprocessing.py -> /home/kbuilder/imported/my_pipeline/models/preprocessing.py model_test.py -> /home/kbuilder/imported/my_pipeline/models/model_test.py __init__.py -> /home/kbuilder/imported/my_pipeline/models/__init__.py constants.py -> /home/kbuilder/imported/my_pipeline/models/constants.py local_runner.py -> /home/kbuilder/imported/my_pipeline/local_runner.py __init__.py -> /home/kbuilder/imported/my_pipeline/__init__.py
এই নোটবুকের কাজের ডিরেক্টরির প্রসঙ্গটি প্রকল্প ডিরেক্টরিতে পরিবর্তন করুন।
%cd {PROJECT_DIR}
/home/kbuilder/imported/my_pipeline
আপনার কপি করা উৎস ফাইল ব্রাউজ করুন
পাইথন সোর্স কোড এবং নমুনা ডেটা সহ পাইপলাইন তৈরি করতে TFX টেমপ্লেট মৌলিক স্ক্যাফোল্ড ফাইল সরবরাহ করে। penguin টেমপ্লেটটি পেঙ্গুইন উদাহরণ হিসাবে একই পামার পেঙ্গুইন ডেটাসেট এবং ML মডেল ব্যবহার করে।
এখানে প্রতিটি পাইথন ফাইলের সংক্ষিপ্ত ভূমিকা রয়েছে।
-
pipeline- এই ডিরেক্টরিতে পাইপলাইনের সংজ্ঞা রয়েছে-
configs.py— পাইপলাইন রানারদের জন্য সাধারণ ধ্রুবক সংজ্ঞায়িত করে -
pipeline.py— TFX উপাদান এবং একটি পাইপলাইন সংজ্ঞায়িত করে
-
-
models- এই ডিরেক্টরিতে ML মডেল সংজ্ঞা রয়েছে-
features.py,features_test.py— মডেলের জন্য বৈশিষ্ট্য সংজ্ঞায়িত করে -
preprocessing.py,preprocessing_test.py— ডেটার জন্য প্রিপ্রসেসিং রুটিন সংজ্ঞায়িত করে -
constants.py— মডেলের ধ্রুবক সংজ্ঞায়িত করে -
model.py,model_test.py— TensorFlow এর মত ML ফ্রেমওয়ার্ক ব্যবহার করে ML মডেলকে সংজ্ঞায়িত করে
-
-
local_runner.py— স্থানীয় পরিবেশের জন্য একটি রানার সংজ্ঞায়িত করুন যা স্থানীয় অর্কেস্ট্রেশন ইঞ্জিন ব্যবহার করে -
kubeflow_runner.py— Kubeflow পাইপলাইন অর্কেস্ট্রেশন ইঞ্জিনের জন্য একজন রানারকে সংজ্ঞায়িত করুন
ডিফল্টরূপে, টেমপ্লেট শুধুমাত্র মান TFX উপাদান অন্তর্ভুক্ত করে। আপনার যদি কিছু কাস্টমাইজড কর্মের প্রয়োজন হয়, আপনি আপনার পাইপলাইনের জন্য কাস্টম উপাদান তৈরি করতে পারেন। বিস্তারিত জানার জন্য অনুগ্রহ করে TFX কাস্টম কম্পোনেন্ট গাইড দেখুন।
ইউনিট-টেস্ট ফাইল।
আপনি লক্ষ্য করতে পারেন যে তাদের নামে _test.py এর সাথে কিছু ফাইল রয়েছে। এগুলি পাইপলাইনের ইউনিট পরীক্ষা এবং আপনি নিজের পাইপলাইনগুলি বাস্তবায়ন করার সাথে সাথে আরও ইউনিট পরীক্ষা যুক্ত করার পরামর্শ দেওয়া হয়। আপনি -m পতাকা সহ টেস্ট ফাইলের মডিউল নাম সরবরাহ করে ইউনিট পরীক্ষা চালাতে পারেন। আপনি সাধারণত .py এক্সটেনশন মুছে এবং / এর সাথে প্রতিস্থাপন করে একটি মডিউল নাম পেতে পারেন . . উদাহরণ স্বরূপ:
import sys
!{sys.executable} -m models.features_test
Running tests under Python 3.7.5: /tmpfs/src/tf_docs_env/bin/python [ RUN ] FeaturesTest.testLabelKey INFO:tensorflow:time(__main__.FeaturesTest.testLabelKey): 0.0s I0203 11:08:46.306882 140258321348416 test_util.py:2309] time(__main__.FeaturesTest.testLabelKey): 0.0s [ OK ] FeaturesTest.testLabelKey [ RUN ] FeaturesTest.test_session [ SKIPPED ] FeaturesTest.test_session ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK (skipped=1)
স্থানীয় পরিবেশে একটি TFX পাইপলাইন তৈরি করুন।
TFX পাইপলাইন চালানোর জন্য বিভিন্ন অর্কেস্ট্রেশন ইঞ্জিন সমর্থন করে। আমরা স্থানীয় অর্কেস্ট্রেশন ইঞ্জিন ব্যবহার করব। স্থানীয় অর্কেস্ট্রেশন ইঞ্জিন আর কোন নির্ভরতা ছাড়াই চলে এবং এটি উন্নয়ন এবং ডিবাগিংয়ের জন্য উপযুক্ত কারণ এটি দূরবর্তী কম্পিউটিং ক্লাস্টারের উপর নির্ভর না করে স্থানীয় পরিবেশে চলে।
আমরা স্থানীয় অর্কেস্ট্রেটর ব্যবহার করে আপনার পাইপলাইন চালানোর জন্য local_runner.py ব্যবহার করব। এটি চালানোর আগে আপনাকে একটি পাইপলাইন তৈরি করতে হবে। আপনি pipeline create কমান্ড দিয়ে একটি পাইপলাইন তৈরি করতে পারেন।
tfx pipeline create --engine=local --pipeline_path=local_runner.py
CLI Creating pipeline INFO:absl:Excluding no splits because exclude_splits is not set. INFO:absl:Excluding no splits because exclude_splits is not set. Pipeline "my_pipeline" created successfully.
pipeline create কমান্ড local_runner.py এ সংজ্ঞায়িত আপনার পাইপলাইনটি আসলে এটি না চালিয়ে নিবন্ধন করে।
আপনি নিম্নলিখিত ধাপে run create কমান্ড দিয়ে তৈরি পাইপলাইন চালাবেন।
ধাপ 2. পাইপলাইনে আপনার ডেটা ইনজেস্ট করুন।
প্রাথমিক পাইপলাইনটি পেঙ্গুইন ডেটাসেটকে প্রবেশ করায় যা টেমপ্লেটে অন্তর্ভুক্ত করা হয়েছে। আপনাকে আপনার ডেটা পাইপলাইনে রাখতে হবে এবং বেশিরভাগ TFX পাইপলাইন ExampleGen কম্পোনেন্ট দিয়ে শুরু হয়।
একটি ExampleGen চয়ন করুন
আপনার পাইপলাইন অ্যাক্সেস করতে পারে এমন যেকোনো জায়গায় আপনার ডেটা সংরক্ষণ করা যেতে পারে, হয় একটি স্থানীয় বা বিতরণ করা ফাইল সিস্টেমে, বা একটি প্রশ্ন-সক্ষম সিস্টেমে। আপনার ডেটাকে একটি TFX পাইপলাইনে আনতে TFX বিভিন্ন ExampleGen উপাদান সরবরাহ করে। আপনি নিম্নলিখিত উদাহরণ তৈরি উপাদান থেকে একটি চয়ন করতে পারেন.
- CsvExampleGen: একটি ডিরেক্টরিতে CSV ফাইল পড়ে। পেঙ্গুইন উদাহরণ এবং শিকাগো ট্যাক্সির উদাহরণে ব্যবহার করা হয়েছে।
- ImportExampleGen: TF উদাহরণ ডেটা বিন্যাস সহ TFRecord ফাইল নেয়। MNIST উদাহরণে ব্যবহৃত হয়।
- Avro বা Parquet বিন্যাসের জন্য FileBasedExampleGen.
- BigQueryExampleGen : Google ক্লাউড BigQuery-এ সরাসরি ডেটা পড়ে। শিকাগো ট্যাক্সি উদাহরণে ব্যবহৃত.
এছাড়াও আপনি নিজের ExampleGen তৈরি করতে পারেন, উদাহরণস্বরূপ, tfx একটি কাস্টম ExecampleGen অন্তর্ভুক্ত করে যা Presto কে ডেটা উৎস হিসেবে ব্যবহার করে। কাস্টম এক্সিকিউটরগুলি কীভাবে ব্যবহার এবং বিকাশ করবেন সে সম্পর্কে আরও তথ্যের জন্য গাইডটি দেখুন।
একবার আপনি কোন ExampleGen ব্যবহার করবেন তা ঠিক করে নিলে, আপনার ডেটা ব্যবহার করার জন্য আপনাকে পাইপলাইনের সংজ্ঞা পরিবর্তন করতে হবে।
DATA_PATHএlocal_runner.pyপরিবর্তন করুন এবং আপনার ফাইলের অবস্থানে সেট করুন।- স্থানীয় পরিবেশে আপনার ফাইল থাকলে, পাথ নির্দিষ্ট করুন। এটি একটি পাইপলাইন বিকাশ বা ডিবাগ করার জন্য সর্বোত্তম বিকল্প।
- ফাইলগুলি GCS-এ সংরক্ষণ করা থাকলে, আপনি
gs://{bucket_name}/...দিয়ে শুরু হওয়া একটি পথ ব্যবহার করতে পারেন। অনুগ্রহ করে নিশ্চিত করুন যে আপনি আপনার টার্মিনাল থেকে GCS অ্যাক্সেস করতে পারেন, উদাহরণস্বরূপ,gsutilব্যবহার করে। প্রয়োজনে অনুগ্রহ করে Google ক্লাউডে অনুমোদন নির্দেশিকা অনুসরণ করুন। - আপনি যদি BigQueryExampleGen-এর মতো একটি কোয়েরি-ভিত্তিক ExampleGen ব্যবহার করতে চান, তাহলে ডেটা উৎস থেকে ডেটা নির্বাচন করতে আপনার একটি ক্যোয়ারী স্টেটমেন্ট প্রয়োজন। ডেটা উৎস হিসেবে Google ক্লাউড BigQuery ব্যবহার করার জন্য আপনাকে আরও কিছু জিনিস সেট করতে হবে।
-
pipeline/configs.py:-
GOOGLE_CLOUD_PROJECTএবংGCS_BUCKET_NAMEআপনার GCP প্রকল্প এবং বাকেটের নাম পরিবর্তন করুন। আমরা পাইপলাইন চালানোর আগে বালতি থাকা উচিত। -
BIG_QUERY_WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGSভেরিয়েবল আনকমেন্ট করুন। - কমেন্ট করুন এবং আপনার ক্যোয়ারী স্টেটমেন্টে
BIG_QUERY_QUERYভেরিয়েবল সেট করুন।
-
-
local_runner.pyএ:-
pipeline.create_pipeline()এর পরিবর্তেdata_pathআর্গুমেন্ট এবং uncommentqueryআর্গুমেন্ট কমেন্ট করুন।
-
-
pipeline/pipeline.py:-
create_pipeline()এdata_pathআর্গুমেন্ট এবং uncommentqueryআর্গুমেন্ট কমেন্ট করুন। - CsvExampleGen এর পরিবর্তে BigQueryExampleGen ব্যবহার করুন।
-
pipeline/pipeline.pyএ বিদ্যমান CsvExampleGen আপনার ExampleGen ক্লাসে প্রতিস্থাপন করুন। প্রতিটি ExampleGen ক্লাসে আলাদা স্বাক্ষর রয়েছে। আরো বিস্তারিত জানার জন্য ExampleGen কম্পোনেন্ট গাইড দেখুন।pipeline/pipeline.pyএimportবিবৃতি সহ প্রয়োজনীয় মডিউল আমদানি করতে ভুলবেন না।
প্রাথমিক পাইপলাইন চারটি উপাদান নিয়ে গঠিত, ExampleGen , StatisticsGen , SchemaGen এবং ExampleValidator । StatisticsGen , SchemaGen এবং ExampleValidator এর জন্য আমাদের কিছু পরিবর্তন করতে হবে না। প্রথমবারের মতো পাইপলাইন চালানো যাক।
# Update and run the pipeline.
!tfx pipeline update --engine=local --pipeline_path=local_runner.py \
&& tfx run create --engine=local --pipeline_name={PIPELINE_NAME}
CLI
Updating pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
Pipeline "my_pipeline" updated successfully.
CLI
Creating a run for pipeline: my_pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Using deployment config:
executor_specs {
key: "CsvExampleGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.example_gen.csv_example_gen.executor.Executor"
}
}
}
}
executor_specs {
key: "SchemaGen"
value {
python_class_executable_spec {
class_path: "tfx.components.schema_gen.executor.Executor"
}
}
}
executor_specs {
key: "StatisticsGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.statistics_gen.executor.Executor"
}
}
}
}
custom_driver_specs {
key: "CsvExampleGen"
value {
python_class_executable_spec {
class_path: "tfx.components.example_gen.driver.FileBasedDriver"
}
}
}
metadata_connection_config {
database_connection_config {
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
}
}
INFO:absl:Using connection config:
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
INFO:absl:Component CsvExampleGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:select span and version = (0, None)
INFO:absl:latest span and version = (0, None)
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 1
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=1, input_dict={}, output_dict=defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/1"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}), exec_properties={'input_config': '{\n "splits": [\n {\n "name": "single_split",\n "pattern": "*"\n }\n ]\n}', 'output_data_format': 6, 'output_file_format': 5, 'output_config': '{\n "split_config": {\n "splits": [\n {\n "hash_buckets": 2,\n "name": "train"\n },\n {\n "hash_buckets": 1,\n "name": "eval"\n }\n ]\n }\n}', 'input_base': '/home/kbuilder/imported/my_pipeline/data', 'span': 0, 'version': None, 'input_fingerprint': 'split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/1/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/stateful_working_dir/2022-02-03T11:09:12.120566', tmp_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/1/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:09:12.120566')
INFO:absl:Generating examples.
INFO:absl:Processing input csv data /home/kbuilder/imported/my_pipeline/data/* to TFExample.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
E0203 11:09:12.848598153 5127 fork_posix.cc:70] Fork support is only compatible with the epoll1 and poll polling strategies
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
INFO:absl:Examples generated.
INFO:absl:Value type <class 'NoneType'> of key version in exec_properties is not supported, going to drop it
INFO:absl:Value type <class 'list'> of key _beam_pipeline_args in exec_properties is not supported, going to drop it
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 1 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/1"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}) for execution 1
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component CsvExampleGen is finished.
INFO:absl:Component StatisticsGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 2
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=2, input_dict={'examples': [Artifact(artifact: id: 1
type_id: 15
uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/1"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "file_format"
value {
string_value: "tfrecords_gzip"
}
}
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "payload_format"
value {
string_value: "FORMAT_TF_EXAMPLE"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886553302
last_update_time_since_epoch: 1643886553302
, artifact_type: id: 15
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}, output_dict=defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/2"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:StatisticsGen:statistics:0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}), exec_properties={'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/2/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/stateful_working_dir/2022-02-03T11:09:12.120566', tmp_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/2/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:09:12.120566')
INFO:absl:Generating statistics for split train.
INFO:absl:Statistics for split train written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/2/Split-train.
INFO:absl:Generating statistics for split eval.
INFO:absl:Statistics for split eval written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/2/Split-eval.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 2 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/2"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}) for execution 2
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component StatisticsGen is finished.
INFO:absl:Component SchemaGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 3
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=3, input_dict={'statistics': [Artifact(artifact: id: 2
type_id: 17
uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/2"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886556588
last_update_time_since_epoch: 1643886556588
, artifact_type: id: 17
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}, output_dict=defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/3"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:SchemaGen:schema:0"
}
}
, artifact_type: name: "Schema"
)]}), exec_properties={'infer_feature_shape': 1, 'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/3/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/stateful_working_dir/2022-02-03T11:09:12.120566', tmp_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/3/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:12.120566"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:09:12.120566')
INFO:absl:Processing schema from statistics for split train.
INFO:absl:Processing schema from statistics for split eval.
INFO:absl:Schema written to ./tfx_pipeline_output/my_pipeline/SchemaGen/schema/3/schema.pbtxt.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 3 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/3"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:12.120566:SchemaGen:schema:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Schema"
)]}) for execution 3
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component SchemaGen is finished.
আপনার দেখতে হবে "কম্পোনেন্ট এক্সাম্পল ভ্যালিডেটর শেষ হয়েছে।" যদি পাইপলাইন সফলভাবে চালানো হয়।
পাইপলাইনের আউটপুট পরীক্ষা করুন।
TFX পাইপলাইন দুই ধরনের আউটপুট, আর্টিফ্যাক্ট এবং একটি মেটাডেটা DB(MLMD) তৈরি করে যাতে আর্টিফ্যাক্ট এবং পাইপলাইন এক্সিকিউশনের মেটাডেটা থাকে। আউটপুটের অবস্থান local_runner.py এ সংজ্ঞায়িত করা হয়েছে। ডিফল্টরূপে, আর্টিফ্যাক্টগুলি tfx_pipeline_output ডিরেক্টরির অধীনে সংরক্ষণ করা হয় এবং মেটাডেটা tfx_metadata ডিরেক্টরির অধীনে একটি sqlite ডাটাবেস হিসাবে সংরক্ষণ করা হয়।
আপনি এই আউটপুট পরীক্ষা করতে MLMD API ব্যবহার করতে পারেন। প্রথমত, আমরা কিছু ইউটিলিটি ফাংশন সংজ্ঞায়িত করব আউটপুট আর্টিফ্যাক্টগুলি অনুসন্ধান করার জন্য যা এইমাত্র উত্পাদিত হয়েছিল।
import tensorflow as tf
import tfx
from ml_metadata import errors
from ml_metadata.proto import metadata_store_pb2
from tfx.types import artifact_utils
# TODO(b/171447278): Move these functions into TFX library.
def get_latest_executions(store, pipeline_name, component_id = None):
"""Fetch all pipeline runs."""
if component_id is None: # Find entire pipeline runs.
run_contexts = [
c for c in store.get_contexts_by_type('run')
if c.properties['pipeline_name'].string_value == pipeline_name
]
else: # Find specific component runs.
run_contexts = [
c for c in store.get_contexts_by_type('component_run')
if c.properties['pipeline_name'].string_value == pipeline_name and
c.properties['component_id'].string_value == component_id
]
if not run_contexts:
return []
# Pick the latest run context.
latest_context = max(run_contexts,
key=lambda c: c.last_update_time_since_epoch)
return store.get_executions_by_context(latest_context.id)
def get_latest_artifacts(store, pipeline_name, component_id = None):
"""Fetch all artifacts from latest pipeline execution."""
executions = get_latest_executions(store, pipeline_name, component_id)
# Fetch all artifacts produced from the given executions.
execution_ids = [e.id for e in executions]
events = store.get_events_by_execution_ids(execution_ids)
artifact_ids = [
event.artifact_id for event in events
if event.type == metadata_store_pb2.Event.OUTPUT
]
return store.get_artifacts_by_id(artifact_ids)
def find_latest_artifacts_by_type(store, artifacts, artifact_type):
"""Get the latest artifacts of a specified type."""
# Get type information from MLMD
try:
artifact_type = store.get_artifact_type(artifact_type)
except errors.NotFoundError:
return []
# Filter artifacts with type.
filtered_artifacts = [aritfact for aritfact in artifacts
if aritfact.type_id == artifact_type.id]
# Convert MLMD artifact data into TFX Artifact instances.
return [artifact_utils.deserialize_artifact(artifact_type, artifact)
for artifact in filtered_artifacts]
from tfx.orchestration.experimental.interactive import visualizations
def visualize_artifacts(artifacts):
"""Visualizes artifacts using standard visualization modules."""
for artifact in artifacts:
visualization = visualizations.get_registry().get_visualization(
artifact.type_name)
if visualization:
visualization.display(artifact)
from tfx.orchestration.experimental.interactive import standard_visualizations
standard_visualizations.register_standard_visualizations()
import pprint
from tfx.orchestration import metadata
from tfx.types import artifact_utils
from tfx.types import standard_artifacts
def preview_examples(artifacts):
"""Preview a few records from Examples artifacts."""
pp = pprint.PrettyPrinter()
for artifact in artifacts:
print("==== Examples artifact:{}({})".format(artifact.name, artifact.uri))
for split in artifact_utils.decode_split_names(artifact.split_names):
print("==== Reading from split:{}".format(split))
split_uri = artifact_utils.get_split_uri([artifact], split)
# Get the list of files in this directory (all compressed TFRecord files)
tfrecord_filenames = [os.path.join(split_uri, name)
for name in os.listdir(split_uri)]
# Create a `TFRecordDataset` to read these files
dataset = tf.data.TFRecordDataset(tfrecord_filenames,
compression_type="GZIP")
# Iterate over the first 2 records and decode them.
for tfrecord in dataset.take(2):
serialized_example = tfrecord.numpy()
example = tf.train.Example()
example.ParseFromString(serialized_example)
pp.pprint(example)
import local_runner
metadata_connection_config = metadata.sqlite_metadata_connection_config(
local_runner.METADATA_PATH)
এখন আমরা MLMD থেকে আউটপুট আর্টিফ্যাক্টের মেটাডেটা পড়তে পারি।
with metadata.Metadata(metadata_connection_config) as metadata_handler:
# Search all aritfacts from the previous pipeline run.
artifacts = get_latest_artifacts(metadata_handler.store, PIPELINE_NAME)
# Find artifacts of Examples type.
examples_artifacts = find_latest_artifacts_by_type(
metadata_handler.store, artifacts,
standard_artifacts.Examples.TYPE_NAME)
# Find artifacts generated from StatisticsGen.
stats_artifacts = find_latest_artifacts_by_type(
metadata_handler.store, artifacts,
standard_artifacts.ExampleStatistics.TYPE_NAME)
# Find artifacts generated from SchemaGen.
schema_artifacts = find_latest_artifacts_by_type(
metadata_handler.store, artifacts,
standard_artifacts.Schema.TYPE_NAME)
# Find artifacts generated from ExampleValidator.
anomalies_artifacts = find_latest_artifacts_by_type(
metadata_handler.store, artifacts,
standard_artifacts.ExampleAnomalies.TYPE_NAME)
এখন আমরা প্রতিটি কম্পোনেন্ট থেকে আউটপুট পরীক্ষা করতে পারি। Tensorflow Data Validation(TFDV) StatisticsGen , SchemaGen এবং ExampleValidator এ ব্যবহার করা হয় এবং TFDV এই উপাদানগুলি থেকে আউটপুটগুলি কল্পনা করতে ব্যবহার করা যেতে পারে।
এই টিউটোরিয়ালে, আমরা TFX-এ ভিজ্যুয়ালাইজেশন হেল্পার পদ্ধতি ব্যবহার করব যা ভিজ্যুয়ালাইজেশন দেখানোর জন্য অভ্যন্তরীণভাবে TFDV ব্যবহার করে। প্রতিটি উপাদান সম্পর্কে আরও জানতে দয়া করে TFX উপাদান টিউটোরিয়াল দেখুন।
আউটপুট ফর্ম ExampleGen পরীক্ষা করুন
ExampleGen থেকে আউটপুট পরীক্ষা করা যাক। প্রতিটি বিভাজনের জন্য প্রথম দুটি উদাহরণ দেখুন:
preview_examples(examples_artifacts)
ডিফল্টরূপে, TFX ExampleGen উদাহরণকে দুটি ভাগে ভাগ করে, ট্রেন এবং ইভাল , কিন্তু আপনি আপনার বিভক্ত কনফিগারেশন সামঞ্জস্য করতে পারেন।
StatisticsGen থেকে আউটপুট পরীক্ষা করুন
visualize_artifacts(stats_artifacts)
এই পরিসংখ্যানগুলি স্বয়ংক্রিয়ভাবে ডেটার একটি স্কিমা তৈরি করতে SchemaGen-এ সরবরাহ করা হয়।
SchemaGen থেকে আউটপুট পরীক্ষা করুন
visualize_artifacts(schema_artifacts)
StatisticsGen-এর আউটপুট থেকে এই স্কিমা স্বয়ংক্রিয়ভাবে অনুমান করা হয়। আমরা এই টিউটোরিয়ালে এই জেনারেটেড স্কিমা ব্যবহার করব, তবে আপনি স্কিমা পরিবর্তন ও কাস্টমাইজ করতে পারেন।
ExampleValidator থেকে আউটপুট পরীক্ষা করুন
visualize_artifacts(anomalies_artifacts)
কোনো অসঙ্গতি পাওয়া গেলে, আপনি আপনার ডেটা পর্যালোচনা করতে পারেন যে সমস্ত উদাহরণ আপনার অনুমান অনুসরণ করে। StatistcsGen এর মত অন্যান্য উপাদান থেকে আউটপুট দরকারী হতে পারে। পাওয়া অসঙ্গতিগুলি পাইপলাইন সম্পাদনকে বাধা দেয় না।
আপনি SchemaGen এর আউটপুট থেকে উপলব্ধ বৈশিষ্ট্য দেখতে পারেন। যদি আপনার বৈশিষ্ট্যগুলি সরাসরি Trainer এমএল মডেল তৈরি করতে ব্যবহার করা যেতে পারে, আপনি পরবর্তী ধাপটি এড়িয়ে যেতে পারেন এবং ধাপ 4 এ যেতে পারেন। অন্যথায় আপনি পরবর্তী ধাপে কিছু বৈশিষ্ট্য প্রকৌশল কাজ করতে পারেন। Transform কম্পোনেন্টের প্রয়োজন হয় যখন পূর্ণ-পাস ক্রিয়াকলাপ যেমন গণনা গড়গুলির প্রয়োজন হয়, বিশেষ করে যখন আপনার স্কেল করার প্রয়োজন হয়।
ধাপ 3. (ঐচ্ছিক) ট্রান্সফর্ম কম্পোনেন্ট সহ ফিচার ইঞ্জিনিয়ারিং।
এই ধাপে, আপনি বিভিন্ন ফিচার ইঞ্জিনিয়ারিং কাজের সংজ্ঞায়িত করবেন যা পাইপলাইনে Transform কম্পোনেন্ট ব্যবহার করবে। আরও তথ্যের জন্য ট্রান্সফর্ম কম্পোনেন্ট গাইড দেখুন।
এটি শুধুমাত্র তখনই প্রয়োজনীয় যদি আপনার প্রশিক্ষণ কোডের জন্য অতিরিক্ত বৈশিষ্ট্য(গুলি) প্রয়োজন যা ExampleGen-এর আউটপুটে উপলব্ধ নয়। অন্যথায়, প্রশিক্ষক ব্যবহার করার পরবর্তী ধাপে দ্রুত এগিয়ে যেতে নির্দ্বিধায়।
মডেলের বৈশিষ্ট্য সংজ্ঞায়িত করুন
models/features.py এ মডেলের জন্য বৈশিষ্ট্য নির্ধারণের জন্য ধ্রুবক রয়েছে যার মধ্যে বৈশিষ্ট্যের নাম, শব্দভান্ডারের আকার এবং আরও অনেক কিছু রয়েছে। ডিফল্টভাবে penguin টেমপ্লেটের দুটি কস্ট্যান্ট রয়েছে, FEATURE_KEYS এবং LABEL_KEY , কারণ আমাদের penguin মডেল তত্ত্বাবধানে শেখার ব্যবহার করে একটি শ্রেণিবিন্যাসের সমস্যা সমাধান করে এবং সমস্ত বৈশিষ্ট্য অবিচ্ছিন্ন সংখ্যাসূচক বৈশিষ্ট্য। অন্য উদাহরণের জন্য শিকাগো ট্যাক্সি উদাহরণ থেকে বৈশিষ্ট্য সংজ্ঞা দেখুন.
প্রিপ্রসেসিং_এফএন() এ প্রশিক্ষণ/সেভিং এর জন্য প্রিপ্রসেসিং প্রয়োগ করুন।
models/preprocessing.py এ preprocessing_fn() ফাংশনে প্রকৃত বৈশিষ্ট্য ইঞ্জিনিয়ারিং ঘটে।
preprocessing_fn -এ আপনি ফাংশনগুলির একটি সিরিজ সংজ্ঞায়িত করতে পারেন যা টেনসরের আউটপুট ডিক্ট তৈরি করতে টেনসরের ইনপুট ডিক্টকে ম্যানিপুলেট করে। টেনসরফ্লো ট্রান্সফর্ম এপিআই-এ scale_to_0_1 এবং compute_and_apply_vocabulary মতো সহায়ক ফাংশন রয়েছে অথবা আপনি সাধারণ টেনসরফ্লো ফাংশন ব্যবহার করতে পারেন। ডিফল্টরূপে penguin টেমপ্লেটে বৈশিষ্ট্যের মান স্বাভাবিক করার জন্য tft.scale_to_z_score ফাংশনের উদাহরণ ব্যবহার করা হয়।
preprocessing_fn লেখার বিষয়ে আরও তথ্যের জন্য টেনসফ্লো ট্রান্সফর্ম গাইড দেখুন।
পাইপলাইনে ট্রান্সফর্ম কম্পোনেন্ট যোগ করুন।
আপনার প্রিপ্রসেসিং_এফএন প্রস্তুত হলে, পাইপলাইনে Transform উপাদান যোগ করুন।
-
pipeline/pipeline.pyফাইলে, পাইপলাইনে উপাদান যোগ করতে# components.append(transform)uncomment করুন।
আপনি পাইপলাইন আপডেট করতে পারেন এবং আবার চালাতে পারেন।
!tfx pipeline update --engine=local --pipeline_path=local_runner.py \
&& tfx run create --engine=local --pipeline_name={PIPELINE_NAME}
CLI
Updating pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
Pipeline "my_pipeline" updated successfully.
CLI
Creating a run for pipeline: my_pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Using deployment config:
executor_specs {
key: "CsvExampleGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.example_gen.csv_example_gen.executor.Executor"
}
}
}
}
executor_specs {
key: "SchemaGen"
value {
python_class_executable_spec {
class_path: "tfx.components.schema_gen.executor.Executor"
}
}
}
executor_specs {
key: "StatisticsGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.statistics_gen.executor.Executor"
}
}
}
}
custom_driver_specs {
key: "CsvExampleGen"
value {
python_class_executable_spec {
class_path: "tfx.components.example_gen.driver.FileBasedDriver"
}
}
}
metadata_connection_config {
database_connection_config {
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
}
}
INFO:absl:Using connection config:
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
INFO:absl:Component CsvExampleGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:select span and version = (0, None)
INFO:absl:latest span and version = (0, None)
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 4
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=4, input_dict={}, output_dict=defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/4"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}), exec_properties={'output_file_format': 5, 'input_base': '/home/kbuilder/imported/my_pipeline/data', 'output_config': '{\n "split_config": {\n "splits": [\n {\n "hash_buckets": 2,\n "name": "train"\n },\n {\n "hash_buckets": 1,\n "name": "eval"\n }\n ]\n }\n}', 'output_data_format': 6, 'input_config': '{\n "splits": [\n {\n "name": "single_split",\n "pattern": "*"\n }\n ]\n}', 'span': 0, 'version': None, 'input_fingerprint': 'split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/4/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/stateful_working_dir/2022-02-03T11:09:37.055994', tmp_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/4/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:09:37.055994')
INFO:absl:Generating examples.
INFO:absl:Processing input csv data /home/kbuilder/imported/my_pipeline/data/* to TFExample.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
E0203 11:09:37.596944686 5287 fork_posix.cc:70] Fork support is only compatible with the epoll1 and poll polling strategies
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
INFO:absl:Examples generated.
INFO:absl:Value type <class 'NoneType'> of key version in exec_properties is not supported, going to drop it
INFO:absl:Value type <class 'list'> of key _beam_pipeline_args in exec_properties is not supported, going to drop it
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 4 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/4"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}) for execution 4
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component CsvExampleGen is finished.
INFO:absl:Component StatisticsGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 5
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=5, input_dict={'examples': [Artifact(artifact: id: 4
type_id: 15
uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/4"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "file_format"
value {
string_value: "tfrecords_gzip"
}
}
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "payload_format"
value {
string_value: "FORMAT_TF_EXAMPLE"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886578210
last_update_time_since_epoch: 1643886578210
, artifact_type: id: 15
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}, output_dict=defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/5"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:StatisticsGen:statistics:0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}), exec_properties={'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/5/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/stateful_working_dir/2022-02-03T11:09:37.055994', tmp_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/5/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:09:37.055994')
INFO:absl:Generating statistics for split train.
INFO:absl:Statistics for split train written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/5/Split-train.
INFO:absl:Generating statistics for split eval.
INFO:absl:Statistics for split eval written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/5/Split-eval.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 5 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/5"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}) for execution 5
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component StatisticsGen is finished.
INFO:absl:Component SchemaGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 6
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=6, input_dict={'statistics': [Artifact(artifact: id: 5
type_id: 17
uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/5"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886581527
last_update_time_since_epoch: 1643886581527
, artifact_type: id: 17
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}, output_dict=defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/6"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:SchemaGen:schema:0"
}
}
, artifact_type: name: "Schema"
)]}), exec_properties={'exclude_splits': '[]', 'infer_feature_shape': 1}, execution_output_uri='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/6/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/stateful_working_dir/2022-02-03T11:09:37.055994', tmp_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/6/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:09:37.055994"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:09:37.055994')
INFO:absl:Processing schema from statistics for split train.
INFO:absl:Processing schema from statistics for split eval.
INFO:absl:Schema written to ./tfx_pipeline_output/my_pipeline/SchemaGen/schema/6/schema.pbtxt.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 6 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/6"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:09:37.055994:SchemaGen:schema:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Schema"
)]}) for execution 6
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component SchemaGen is finished.
যদি পাইপলাইন সফলভাবে চলে, তাহলে আপনার দেখতে হবে "কম্পোনেন্ট ট্রান্সফর্ম শেষ হয়েছে।" লগে কোথাও । যেহেতু Transform কম্পোনেন্ট এবং ExampleValidator কম্পোনেন্ট একে অপরের উপর নির্ভরশীল নয়, তাই মৃত্যুদন্ডের ক্রম স্থির নয়। তাতে বলা হয়েছে, Transform এবং ExampleValidator যে কোনো একটিই পাইপলাইন এক্সিকিউশনের শেষ উপাদান হতে পারে।
ট্রান্সফর্ম থেকে আউটপুট পরীক্ষা করুন
ট্রান্সফর্ম কম্পোনেন্ট দুই ধরনের আউটপুট তৈরি করে, একটি টেনসরফ্লো গ্রাফ এবং রূপান্তরিত উদাহরণ। রূপান্তরিত উদাহরণ হল উদাহরণ আর্টিফ্যাক্ট টাইপ যা ExampleGen দ্বারা উত্পাদিত হয়, কিন্তু এটির পরিবর্তে রূপান্তরিত বৈশিষ্ট্যের মান রয়েছে।
আমরা আগের ধাপে যেমন করেছিলাম আপনি সেগুলি পরীক্ষা করতে পারেন।
with metadata.Metadata(metadata_connection_config) as metadata_handler:
# Search all aritfacts from the previous run of Transform component.
artifacts = get_latest_artifacts(metadata_handler.store,
PIPELINE_NAME, "Transform")
# Find artifacts of Examples type.
transformed_examples_artifacts = find_latest_artifacts_by_type(
metadata_handler.store, artifacts,
standard_artifacts.Examples.TYPE_NAME)
preview_examples(transformed_examples_artifacts)
ধাপ 4. প্রশিক্ষক উপাদান দিয়ে আপনার মডেল প্রশিক্ষণ.
আমরা Trainer উপাদান ব্যবহার করে একটি এমএল মডেল তৈরি করব। আরও তথ্যের জন্য প্রশিক্ষক উপাদান নির্দেশিকা দেখুন। আপনাকে প্রশিক্ষক উপাদানে আপনার মডেল কোড প্রদান করতে হবে।
আপনার মডেল সংজ্ঞায়িত করুন.
পেঙ্গুইন টেমপ্লেটে, models.model.run_fn Trainer উপাদানের জন্য run_fn আর্গুমেন্ট হিসাবে ব্যবহৃত হয়। এর মানে হল models/model.py এ run_fn() ফাংশন কল করা হবে যখন Trainer কম্পোনেন্ট চলে। আপনি প্রদত্ত কোডে keras API ব্যবহার করে একটি সাধারণ DNN মডেল তৈরি করতে কোডটি দেখতে পারেন। TFX-এ keras API ব্যবহার করার বিষয়ে আরও তথ্যের জন্য TFX গাইডে TensorFlow 2.x দেখুন।
এই run_fn এ, আপনার একটি মডেল তৈরি করা উচিত এবং fn_args.serving_model_dir দ্বারা নির্দেশিত একটি ডিরেক্টরিতে সংরক্ষণ করা উচিত যা উপাদান দ্বারা নির্দিষ্ট করা হয়েছে। আপনি run_fn এ অন্যান্য আর্গুমেন্ট ব্যবহার করতে পারেন যা fn_args এ পাস হয়। fn_args এ আর্গুমেন্টের সম্পূর্ণ তালিকার জন্য সম্পর্কিত কোডগুলি দেখুন।
models/features.py এ আপনার বৈশিষ্ট্যগুলি সংজ্ঞায়িত করুন এবং প্রয়োজন অনুসারে ব্যবহার করুন। আপনি যদি ধাপ 3 এ আপনার বৈশিষ্ট্যগুলিকে রূপান্তরিত করে থাকেন তবে আপনার মডেলের ইনপুট হিসাবে রূপান্তরিত বৈশিষ্ট্যগুলি ব্যবহার করা উচিত৷
পাইপলাইনে প্রশিক্ষক উপাদান যোগ করুন।
আপনার রান_এফএন প্রস্তুত হলে, পাইপলাইনে Trainer উপাদান যোগ করুন।
-
pipeline/pipeline.pyফাইলে, পাইপলাইনে উপাদান যোগ করতে# components.append(trainer)uncomment করুন।
আপনি ট্রান্সফর্ম কম্পোনেন্ট ব্যবহার করেন কি না তার উপর প্রশিক্ষক উপাদানের আর্গুমেন্ট নির্ভর করে।
- আপনি যদি
Transformকম্পোনেন্ট ব্যবহার না করেন তবে আপনাকে আর্গুমেন্ট পরিবর্তন করতে হবে না। আপনি যদি
Transformকম্পোনেন্ট ব্যবহার করেন, তাহলেTrainerকম্পোনেন্ট ইনস্ট্যান্স তৈরি করার সময় আপনাকে আর্গুমেন্ট পরিবর্তন করতে হবে।-
examplesআর্গুমেন্ট পরিবর্তন করেexamples=transform.outputs['transformed_examples'],. আমাদের প্রশিক্ষণের জন্য রূপান্তরিত উদাহরণ ব্যবহার করতে হবে। -
transform_graph=transform.outputs['transform_graph'],মতtransform_graphআর্গুমেন্ট যোগ করুন। এই গ্রাফটিতে ট্রান্সফর্ম অপারেশনের জন্য TensorFlow গ্রাফ রয়েছে। - উপরের পরিবর্তনের পর, প্রশিক্ষক উপাদান তৈরির কোডটি নিচের মত দেখাবে।
# If you use a Transform component. trainer = Trainer( run_fn=run_fn, examples=transform.outputs['transformed_examples'], transform_graph=transform.outputs['transform_graph'], schema=schema_gen.outputs['schema'], ...-
আপনি পাইপলাইন আপডেট করতে পারেন এবং আবার চালাতে পারেন।
!tfx pipeline update --engine=local --pipeline_path=local_runner.py \
&& tfx run create --engine=local --pipeline_name={PIPELINE_NAME}
CLI
Updating pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
Pipeline "my_pipeline" updated successfully.
CLI
Creating a run for pipeline: my_pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Using deployment config:
executor_specs {
key: "CsvExampleGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.example_gen.csv_example_gen.executor.Executor"
}
}
}
}
executor_specs {
key: "SchemaGen"
value {
python_class_executable_spec {
class_path: "tfx.components.schema_gen.executor.Executor"
}
}
}
executor_specs {
key: "StatisticsGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.statistics_gen.executor.Executor"
}
}
}
}
custom_driver_specs {
key: "CsvExampleGen"
value {
python_class_executable_spec {
class_path: "tfx.components.example_gen.driver.FileBasedDriver"
}
}
}
metadata_connection_config {
database_connection_config {
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
}
}
INFO:absl:Using connection config:
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
INFO:absl:Component CsvExampleGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:select span and version = (0, None)
INFO:absl:latest span and version = (0, None)
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 7
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=7, input_dict={}, output_dict=defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/7"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}), exec_properties={'input_base': '/home/kbuilder/imported/my_pipeline/data', 'output_config': '{\n "split_config": {\n "splits": [\n {\n "hash_buckets": 2,\n "name": "train"\n },\n {\n "hash_buckets": 1,\n "name": "eval"\n }\n ]\n }\n}', 'output_data_format': 6, 'output_file_format': 5, 'input_config': '{\n "splits": [\n {\n "name": "single_split",\n "pattern": "*"\n }\n ]\n}', 'span': 0, 'version': None, 'input_fingerprint': 'split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/7/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/stateful_working_dir/2022-02-03T11:10:00.469382', tmp_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/7/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:00.469382')
INFO:absl:Generating examples.
INFO:absl:Processing input csv data /home/kbuilder/imported/my_pipeline/data/* to TFExample.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
E0203 11:10:01.173700221 5436 fork_posix.cc:70] Fork support is only compatible with the epoll1 and poll polling strategies
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
INFO:absl:Examples generated.
INFO:absl:Value type <class 'NoneType'> of key version in exec_properties is not supported, going to drop it
INFO:absl:Value type <class 'list'> of key _beam_pipeline_args in exec_properties is not supported, going to drop it
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 7 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/7"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}) for execution 7
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component CsvExampleGen is finished.
INFO:absl:Component StatisticsGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 8
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=8, input_dict={'examples': [Artifact(artifact: id: 7
type_id: 15
uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/7"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "file_format"
value {
string_value: "tfrecords_gzip"
}
}
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "payload_format"
value {
string_value: "FORMAT_TF_EXAMPLE"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886601629
last_update_time_since_epoch: 1643886601629
, artifact_type: id: 15
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}, output_dict=defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/8"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:StatisticsGen:statistics:0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}), exec_properties={'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/8/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/stateful_working_dir/2022-02-03T11:10:00.469382', tmp_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/8/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:00.469382')
INFO:absl:Generating statistics for split train.
INFO:absl:Statistics for split train written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/8/Split-train.
INFO:absl:Generating statistics for split eval.
INFO:absl:Statistics for split eval written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/8/Split-eval.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 8 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/8"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}) for execution 8
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component StatisticsGen is finished.
INFO:absl:Component SchemaGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 9
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=9, input_dict={'statistics': [Artifact(artifact: id: 8
type_id: 17
uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/8"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886605023
last_update_time_since_epoch: 1643886605023
, artifact_type: id: 17
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}, output_dict=defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/9"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:SchemaGen:schema:0"
}
}
, artifact_type: name: "Schema"
)]}), exec_properties={'exclude_splits': '[]', 'infer_feature_shape': 1}, execution_output_uri='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/9/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/stateful_working_dir/2022-02-03T11:10:00.469382', tmp_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/9/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:00.469382"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:00.469382')
INFO:absl:Processing schema from statistics for split train.
INFO:absl:Processing schema from statistics for split eval.
INFO:absl:Schema written to ./tfx_pipeline_output/my_pipeline/SchemaGen/schema/9/schema.pbtxt.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 9 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/9"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:00.469382:SchemaGen:schema:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Schema"
)]}) for execution 9
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component SchemaGen is finished.
যখন এই এক্সিকিউশন সফলভাবে চলে, আপনি এখন আপনার মডেলের জন্য আপনার প্রথম TFX পাইপলাইন তৈরি করেছেন এবং চালান। অভিনন্দন!
আপনার নতুন মডেলটি আউটপুট ডিরেক্টরির অধীনে কিছু জায়গায় অবস্থিত হবে, কিন্তু TFX পাইপলাইনের বাইরে একটি নির্দিষ্ট অবস্থান বা পরিষেবাতে একটি মডেল রাখা ভাল যা অনেক অন্তর্বর্তী ফলাফল ধারণ করে। বিল্ট মডেলের ক্রমাগত মূল্যায়নের সাথে আরও ভাল যা এমএল উৎপাদন ব্যবস্থায় গুরুত্বপূর্ণ। আমরা পরবর্তী ধাপে TFX-এ ক্রমাগত মূল্যায়ন এবং স্থাপনা কীভাবে কাজ করে তা দেখব।
ধাপ 5. (ঐচ্ছিক) মূল্যায়নকারীর সাথে মডেলটি মূল্যায়ন করুন এবং পুশার দিয়ে প্রকাশ করুন।
Evaluator কম্পোনেন্ট Trainer থেকে তৈরি করা প্রতিটি মডেলকে ক্রমাগত মূল্যায়ন করে এবং Pusher মডেলটিকে ফাইল সিস্টেমের একটি পূর্বনির্ধারিত অবস্থানে বা এমনকি Google ক্লাউড এআই প্ল্যাটফর্ম মডেলগুলিতে অনুলিপি করে।
পাইপলাইনে মূল্যায়নকারী উপাদান যোগ করে।
pipeline/pipeline.py ফাইলে:
- পাইপলাইনে সর্বশেষ মডেল সমাধানকারী যোগ করতে
# components.append(model_resolver)করুন। মূল্যায়নকারীকে পুরানো বেসলাইন মডেলের সাথে তুলনা করতে ব্যবহার করা যেতে পারে যা শেষ পাইপলাইনে ইভালুয়েটর পাস করেছে।LatestBlessedModelResolverসর্বশেষ মডেল খুঁজে পায় যা মূল্যায়নকারীকে পাস করেছে। - আপনার মডেলের জন্য সঠিক
tfma.MetricsSpecসেট করুন। প্রতিটি ML মডেলের জন্য মূল্যায়ন ভিন্ন হতে পারে। পেঙ্গুইন টেমপ্লেটে,SparseCategoricalAccuracyব্যবহার করা হয়েছে কারণ আমরা একটি মাল্টি ক্যাটাগরির শ্রেণীবিভাগ সমস্যা সমাধান করছি। নির্দিষ্ট স্লাইসের জন্য আপনার মডেল বিশ্লেষণ করতে আপনাকেtfma.SliceSpecনির্দিষ্ট করতে হবে। আরো বিস্তারিত জানার জন্য, মূল্যায়নকারী উপাদান নির্দেশিকা দেখুন। - পাইপলাইনে উপাদান যোগ করতে
# components.append(evaluator)করুন।
আপনি পাইপলাইন আপডেট করতে পারেন এবং আবার চালাতে পারেন।
# Update and run the pipeline.
!tfx pipeline update --engine=local --pipeline_path=local_runner.py \
&& tfx run create --engine=local --pipeline_name={PIPELINE_NAME}
CLI
Updating pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
Pipeline "my_pipeline" updated successfully.
CLI
Creating a run for pipeline: my_pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Using deployment config:
executor_specs {
key: "CsvExampleGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.example_gen.csv_example_gen.executor.Executor"
}
}
}
}
executor_specs {
key: "SchemaGen"
value {
python_class_executable_spec {
class_path: "tfx.components.schema_gen.executor.Executor"
}
}
}
executor_specs {
key: "StatisticsGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.statistics_gen.executor.Executor"
}
}
}
}
custom_driver_specs {
key: "CsvExampleGen"
value {
python_class_executable_spec {
class_path: "tfx.components.example_gen.driver.FileBasedDriver"
}
}
}
metadata_connection_config {
database_connection_config {
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
}
}
INFO:absl:Using connection config:
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
INFO:absl:Component CsvExampleGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:select span and version = (0, None)
INFO:absl:latest span and version = (0, None)
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 10
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=10, input_dict={}, output_dict=defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/10"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}), exec_properties={'output_file_format': 5, 'output_config': '{\n "split_config": {\n "splits": [\n {\n "hash_buckets": 2,\n "name": "train"\n },\n {\n "hash_buckets": 1,\n "name": "eval"\n }\n ]\n }\n}', 'output_data_format': 6, 'input_base': '/home/kbuilder/imported/my_pipeline/data', 'input_config': '{\n "splits": [\n {\n "name": "single_split",\n "pattern": "*"\n }\n ]\n}', 'span': 0, 'version': None, 'input_fingerprint': 'split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/10/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/stateful_working_dir/2022-02-03T11:10:24.358660', tmp_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/10/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:24.358660')
INFO:absl:Generating examples.
INFO:absl:Processing input csv data /home/kbuilder/imported/my_pipeline/data/* to TFExample.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
E0203 11:10:24.894390124 5584 fork_posix.cc:70] Fork support is only compatible with the epoll1 and poll polling strategies
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
INFO:absl:Examples generated.
INFO:absl:Value type <class 'NoneType'> of key version in exec_properties is not supported, going to drop it
INFO:absl:Value type <class 'list'> of key _beam_pipeline_args in exec_properties is not supported, going to drop it
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 10 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/10"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}) for execution 10
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component CsvExampleGen is finished.
INFO:absl:Component StatisticsGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 11
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=11, input_dict={'examples': [Artifact(artifact: id: 10
type_id: 15
uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/10"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "file_format"
value {
string_value: "tfrecords_gzip"
}
}
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "payload_format"
value {
string_value: "FORMAT_TF_EXAMPLE"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886625515
last_update_time_since_epoch: 1643886625515
, artifact_type: id: 15
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}, output_dict=defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/11"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:StatisticsGen:statistics:0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}), exec_properties={'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/11/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/stateful_working_dir/2022-02-03T11:10:24.358660', tmp_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/11/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:24.358660')
INFO:absl:Generating statistics for split train.
INFO:absl:Statistics for split train written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/11/Split-train.
INFO:absl:Generating statistics for split eval.
INFO:absl:Statistics for split eval written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/11/Split-eval.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 11 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/11"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}) for execution 11
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component StatisticsGen is finished.
INFO:absl:Component SchemaGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 12
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=12, input_dict={'statistics': [Artifact(artifact: id: 11
type_id: 17
uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/11"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886628941
last_update_time_since_epoch: 1643886628941
, artifact_type: id: 17
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}, output_dict=defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/12"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:SchemaGen:schema:0"
}
}
, artifact_type: name: "Schema"
)]}), exec_properties={'infer_feature_shape': 1, 'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/12/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/stateful_working_dir/2022-02-03T11:10:24.358660', tmp_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/12/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:24.358660"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:24.358660')
INFO:absl:Processing schema from statistics for split train.
INFO:absl:Processing schema from statistics for split eval.
INFO:absl:Schema written to ./tfx_pipeline_output/my_pipeline/SchemaGen/schema/12/schema.pbtxt.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 12 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/12"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:24.358660:SchemaGen:schema:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Schema"
)]}) for execution 12
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component SchemaGen is finished.
মূল্যায়নকারীর আউটপুট পরীক্ষা করুন
এই ধাপের জন্য TensorFlow মডেল বিশ্লেষণ (TFMA) জুপিটার নোটবুক এক্সটেনশন প্রয়োজন। মনে রাখবেন যে TFMA নোটবুক এক্সটেনশনের সংস্করণটি TFMA পাইথন প্যাকেজের সংস্করণের মতো হওয়া উচিত।
নিম্নলিখিত কমান্ডটি NPM রেজিস্ট্রি থেকে TFMA নোটবুক এক্সটেনশন ইনস্টল করবে। এটি সম্পূর্ণ হতে কয়েক মিনিট সময় লাগতে পারে।
# Install TFMA notebook extension.jupyter labextension install tensorflow_model_analysis@{tfma.__version__}
usage: jupyter [-h] [--version] [--config-dir] [--data-dir] [--runtime-dir]
[--paths] [--json] [--debug]
[subcommand]
Jupyter: Interactive Computing
positional arguments:
subcommand the subcommand to launch
optional arguments:
-h, --help show this help message and exit
--version show the versions of core jupyter packages and exit
--config-dir show Jupyter config dir
--data-dir show Jupyter data dir
--runtime-dir show Jupyter runtime dir
--paths show all Jupyter paths. Add --json for machine-readable
format.
--json output paths as machine-readable json
--debug output debug information about paths
Available subcommands: bundlerextension console dejavu execute kernel
kernelspec migrate nbconvert nbextension notebook qtconsole run
serverextension troubleshoot trust
Jupyter command `jupyter-labextension` not found.
ইনস্টলেশন সম্পন্ন হলে, এক্সটেনশন কার্যকর করতে আপনার ব্রাউজার পুনরায় লোড করুন ।
with metadata.Metadata(metadata_connection_config) as metadata_handler:
# Search all aritfacts from the previous pipeline run.
artifacts = get_latest_artifacts(metadata_handler.store, PIPELINE_NAME)
model_evaluation_artifacts = find_latest_artifacts_by_type(
metadata_handler.store, artifacts,
standard_artifacts.ModelEvaluation.TYPE_NAME)
if model_evaluation_artifacts:
tfma_result = tfma.load_eval_result(model_evaluation_artifacts[0].uri)
tfma.view.render_slicing_metrics(tfma_result)
পাইপলাইনে পুশার উপাদান যোগ করে।
যদি মডেলটি প্রতিশ্রুতিশীল মনে হয় তবে আমাদের মডেলটি প্রকাশ করতে হবে। পুশার কম্পোনেন্ট কাস্টম এক্সিকিউটর ব্যবহার করে ফাইল সিস্টেমের একটি অবস্থানে বা GCP AI প্ল্যাটফর্ম মডেলগুলিতে মডেলটি প্রকাশ করতে পারে।
Evaluator কম্পোনেন্ট Trainer থেকে তৈরি করা প্রতিটি মডেলকে ক্রমাগত মূল্যায়ন করে এবং Pusher মডেলটিকে ফাইল সিস্টেমের একটি পূর্বনির্ধারিত অবস্থানে বা এমনকি Google ক্লাউড এআই প্ল্যাটফর্ম মডেলগুলিতে অনুলিপি করে।
-
local_runner.pyএ, প্রকাশ করার জন্য একটি ডিরেক্টরিতেSERVING_MODEL_DIRসেট করুন। -
pipeline/pipeline.pyফাইলে, পাইপলাইনে পুশার যোগ করতে# components.append(pusher)আনকমেন্ট করুন।
আপনি পাইপলাইন আপডেট করতে পারেন এবং আবার চালাতে পারেন।
# Update and run the pipeline.
!tfx pipeline update --engine=local --pipeline_path=local_runner.py \
&& tfx run create --engine=local --pipeline_name={PIPELINE_NAME}
CLI
Updating pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
Pipeline "my_pipeline" updated successfully.
CLI
Creating a run for pipeline: my_pipeline
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Excluding no splits because exclude_splits is not set.
INFO:absl:Using deployment config:
executor_specs {
key: "CsvExampleGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.example_gen.csv_example_gen.executor.Executor"
}
}
}
}
executor_specs {
key: "SchemaGen"
value {
python_class_executable_spec {
class_path: "tfx.components.schema_gen.executor.Executor"
}
}
}
executor_specs {
key: "StatisticsGen"
value {
beam_executable_spec {
python_executor_spec {
class_path: "tfx.components.statistics_gen.executor.Executor"
}
}
}
}
custom_driver_specs {
key: "CsvExampleGen"
value {
python_class_executable_spec {
class_path: "tfx.components.example_gen.driver.FileBasedDriver"
}
}
}
metadata_connection_config {
database_connection_config {
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
}
}
INFO:absl:Using connection config:
sqlite {
filename_uri: "./tfx_metadata/my_pipeline/metadata.db"
connection_mode: READWRITE_OPENCREATE
}
INFO:absl:Component CsvExampleGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:select span and version = (0, None)
INFO:absl:latest span and version = (0, None)
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 13
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=13, input_dict={}, output_dict=defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/13"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}), exec_properties={'input_config': '{\n "splits": [\n {\n "name": "single_split",\n "pattern": "*"\n }\n ]\n}', 'output_config': '{\n "split_config": {\n "splits": [\n {\n "hash_buckets": 2,\n "name": "train"\n },\n {\n "hash_buckets": 1,\n "name": "eval"\n }\n ]\n }\n}', 'output_file_format': 5, 'output_data_format': 6, 'input_base': '/home/kbuilder/imported/my_pipeline/data', 'span': 0, 'version': None, 'input_fingerprint': 'split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/13/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/stateful_working_dir/2022-02-03T11:10:48.556314', tmp_dir='./tfx_pipeline_output/my_pipeline/CsvExampleGen/.system/executor_execution/13/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.example_gen.csv_example_gen.component.CsvExampleGen"
}
id: "CsvExampleGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
}
outputs {
outputs {
key: "examples"
value {
artifact_spec {
type {
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
}
}
}
}
}
parameters {
parameters {
key: "input_base"
value {
field_value {
string_value: "/home/kbuilder/imported/my_pipeline/data"
}
}
}
parameters {
key: "input_config"
value {
field_value {
string_value: "{\n \"splits\": [\n {\n \"name\": \"single_split\",\n \"pattern\": \"*\"\n }\n ]\n}"
}
}
}
parameters {
key: "output_config"
value {
field_value {
string_value: "{\n \"split_config\": {\n \"splits\": [\n {\n \"hash_buckets\": 2,\n \"name\": \"train\"\n },\n {\n \"hash_buckets\": 1,\n \"name\": \"eval\"\n }\n ]\n }\n}"
}
}
}
parameters {
key: "output_data_format"
value {
field_value {
int_value: 6
}
}
}
parameters {
key: "output_file_format"
value {
field_value {
int_value: 5
}
}
}
}
downstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:48.556314')
INFO:absl:Generating examples.
INFO:absl:Processing input csv data /home/kbuilder/imported/my_pipeline/data/* to TFExample.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
E0203 11:10:49.163841363 5734 fork_posix.cc:70] Fork support is only compatible with the epoll1 and poll polling strategies
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
INFO:absl:Examples generated.
INFO:absl:Value type <class 'NoneType'> of key version in exec_properties is not supported, going to drop it
INFO:absl:Value type <class 'list'> of key _beam_pipeline_args in exec_properties is not supported, going to drop it
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 13 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'examples': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/13"
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}) for execution 13
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component CsvExampleGen is finished.
INFO:absl:Component StatisticsGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 14
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=14, input_dict={'examples': [Artifact(artifact: id: 13
type_id: 15
uri: "./tfx_pipeline_output/my_pipeline/CsvExampleGen/examples/13"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "file_format"
value {
string_value: "tfrecords_gzip"
}
}
custom_properties {
key: "input_fingerprint"
value {
string_value: "split:single_split,num_files:1,total_bytes:25648,xor_checksum:1643886522,sum_checksum:1643886522"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:CsvExampleGen:examples:0"
}
}
custom_properties {
key: "payload_format"
value {
string_value: "FORMAT_TF_EXAMPLE"
}
}
custom_properties {
key: "span"
value {
int_value: 0
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886649739
last_update_time_since_epoch: 1643886649739
, artifact_type: id: 15
name: "Examples"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
properties {
key: "version"
value: INT
}
base_type: DATASET
)]}, output_dict=defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/14"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:StatisticsGen:statistics:0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}), exec_properties={'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/14/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/stateful_working_dir/2022-02-03T11:10:48.556314', tmp_dir='./tfx_pipeline_output/my_pipeline/StatisticsGen/.system/executor_execution/14/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.statistics_gen.component.StatisticsGen"
base_type: PROCESS
}
id: "StatisticsGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
}
inputs {
inputs {
key: "examples"
value {
channels {
producer_node_query {
id: "CsvExampleGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.CsvExampleGen"
}
}
}
artifact_query {
type {
name: "Examples"
base_type: DATASET
}
}
output_key: "examples"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "statistics"
value {
artifact_spec {
type {
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
}
upstream_nodes: "CsvExampleGen"
downstream_nodes: "SchemaGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:48.556314')
INFO:absl:Generating statistics for split train.
INFO:absl:Statistics for split train written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/14/Split-train.
INFO:absl:Generating statistics for split eval.
INFO:absl:Statistics for split eval written to ./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/14/Split-eval.
WARNING:root:Make sure that locally built Python SDK docker image has Python 3.7 interpreter.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 14 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'statistics': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/14"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}) for execution 14
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component StatisticsGen is finished.
INFO:absl:Component SchemaGen is running.
INFO:absl:Running launcher for node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Going to run a new execution 15
INFO:absl:Going to run a new execution: ExecutionInfo(execution_id=15, input_dict={'statistics': [Artifact(artifact: id: 14
type_id: 17
uri: "./tfx_pipeline_output/my_pipeline/StatisticsGen/statistics/14"
properties {
key: "split_names"
value {
string_value: "[\"train\", \"eval\"]"
}
}
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:StatisticsGen:statistics:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
state: LIVE
create_time_since_epoch: 1643886653128
last_update_time_since_epoch: 1643886653128
, artifact_type: id: 17
name: "ExampleStatistics"
properties {
key: "span"
value: INT
}
properties {
key: "split_names"
value: STRING
}
base_type: STATISTICS
)]}, output_dict=defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/15"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:SchemaGen:schema:0"
}
}
, artifact_type: name: "Schema"
)]}), exec_properties={'infer_feature_shape': 1, 'exclude_splits': '[]'}, execution_output_uri='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/15/executor_output.pb', stateful_working_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/stateful_working_dir/2022-02-03T11:10:48.556314', tmp_dir='./tfx_pipeline_output/my_pipeline/SchemaGen/.system/executor_execution/15/.temp/', pipeline_node=node_info {
type {
name: "tfx.components.schema_gen.component.SchemaGen"
base_type: PROCESS
}
id: "SchemaGen"
}
contexts {
contexts {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
contexts {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
contexts {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.SchemaGen"
}
}
}
}
inputs {
inputs {
key: "statistics"
value {
channels {
producer_node_query {
id: "StatisticsGen"
}
context_queries {
type {
name: "pipeline"
}
name {
field_value {
string_value: "my_pipeline"
}
}
}
context_queries {
type {
name: "pipeline_run"
}
name {
field_value {
string_value: "2022-02-03T11:10:48.556314"
}
}
}
context_queries {
type {
name: "node"
}
name {
field_value {
string_value: "my_pipeline.StatisticsGen"
}
}
}
artifact_query {
type {
name: "ExampleStatistics"
base_type: STATISTICS
}
}
output_key: "statistics"
}
min_count: 1
}
}
}
outputs {
outputs {
key: "schema"
value {
artifact_spec {
type {
name: "Schema"
}
}
}
}
}
parameters {
parameters {
key: "exclude_splits"
value {
field_value {
string_value: "[]"
}
}
}
parameters {
key: "infer_feature_shape"
value {
field_value {
int_value: 1
}
}
}
}
upstream_nodes: "StatisticsGen"
execution_options {
caching_options {
}
}
, pipeline_info=id: "my_pipeline"
, pipeline_run_id='2022-02-03T11:10:48.556314')
INFO:absl:Processing schema from statistics for split train.
INFO:absl:Processing schema from statistics for split eval.
INFO:absl:Schema written to ./tfx_pipeline_output/my_pipeline/SchemaGen/schema/15/schema.pbtxt.
INFO:absl:Cleaning up stateless execution info.
INFO:absl:Execution 15 succeeded.
INFO:absl:Cleaning up stateful execution info.
INFO:absl:Publishing output artifacts defaultdict(<class 'list'>, {'schema': [Artifact(artifact: uri: "./tfx_pipeline_output/my_pipeline/SchemaGen/schema/15"
custom_properties {
key: "name"
value {
string_value: "my_pipeline:2022-02-03T11:10:48.556314:SchemaGen:schema:0"
}
}
custom_properties {
key: "tfx_version"
value {
string_value: "1.6.0"
}
}
, artifact_type: name: "Schema"
)]}) for execution 15
INFO:absl:MetadataStore with DB connection initialized
INFO:absl:Component SchemaGen is finished.
আপনি SERVING_MODEL_DIR এ আপনার নতুন মডেল খুঁজে পেতে সক্ষম হবেন।
ধাপ 6. (ঐচ্ছিক) আপনার পাইপলাইনকে জিসিপিতে কুবেফ্লো পাইপলাইনে স্থাপন করুন।
পূর্বে উল্লিখিত হিসাবে, local_runner.py ডিবাগিং বা উন্নয়নের উদ্দেশ্যে ভাল কিন্তু উৎপাদন কাজের চাপের জন্য একটি সেরা সমাধান নয়। এই ধাপে, আমরা Google ক্লাউডে কুবেফ্লো পাইপলাইনে পাইপলাইন স্থাপন করব।
প্রস্তুতি
একটি Kubeflow পাইপলাইন ক্লাস্টারে একটি পাইপলাইন স্থাপন করার জন্য আমাদের kfp পাইথন প্যাকেজ এবং skaffold প্রোগ্রাম প্রয়োজন।
pip install --upgrade -q kfp# Download skaffold and set it executable.curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && chmod +x skaffold
আপনাকে skaffold বাইনারিটি এমন জায়গায় সরাতে হবে যেখানে আপনার শেল এটি খুঁজে পেতে পারে। অথবা আপনি যখন --skaffold-cmd পতাকা দিয়ে tfx বাইনারি চালান তখন আপনি skaffold-এর পথ নির্দিষ্ট করতে পারেন।
# Move skaffold binary into your pathmv skaffold /home/jupyter/.local/bin/
mv: cannot move 'skaffold' to '/home/jupyter/.local/bin/': No such file or directory
পাইপলাইন চালানোর জন্য আপনার একটি কুবেফ্লো পাইপলাইন ক্লাস্টারও প্রয়োজন। অনুগ্রহ করে ক্লাউড এআই প্ল্যাটফর্ম পাইপলাইন টিউটোরিয়ালের TFX-এ ধাপ 1 এবং 2 অনুসরণ করুন।
আপনার ক্লাস্টার প্রস্তুত হলে, Google ক্লাউড কনসোলের Pipelines পৃষ্ঠায় ওপেন পাইপলাইন ড্যাশবোর্ডে ক্লিক করে পাইপলাইন ড্যাশবোর্ড খুলুন। একটি পাইপলাইন চালানোর অনুরোধ করার জন্য এই পৃষ্ঠার URL হল ENDPOINT ৷ googleusercontent.com পর্যন্ত, এবং সহ, https://-এর পরে URL-এ থাকা সবকিছুই শেষ পয়েন্টের মান। নিম্নলিখিত কোড ব্লকে আপনার শেষ পয়েন্ট রাখুন।
ENDPOINT='' # Enter your ENDPOINT here.
একটি Kubeflow পাইপলাইন ক্লাস্টারে আমাদের কোড চালানোর জন্য, আমাদের কোড একটি ধারক চিত্রে প্যাক করতে হবে। আমাদের পাইপলাইন স্থাপন করার সময় ছবিটি স্বয়ংক্রিয়ভাবে নির্মিত হবে এবং আপনাকে শুধুমাত্র আপনার ছবির জন্য একটি নাম এবং একটি ধারক রেজিস্ট্রি সেট করতে হবে। আমাদের উদাহরণে, আমরা Google কন্টেইনার রেজিস্ট্রি ব্যবহার করব এবং এটির নাম tfx-pipeline ।
# Read GCP project id from env.
shell_output=!gcloud config list --format 'value(core.project)' 2>/dev/null
GOOGLE_CLOUD_PROJECT=shell_output[0]
# Docker image name for the pipeline image.
CUSTOM_TFX_IMAGE='gcr.io/' + GOOGLE_CLOUD_PROJECT + '/tfx-pipeline'
ডেটা অবস্থান সেট করুন।
আপনার ডেটা কুবেফ্লো পাইপলাইন ক্লাস্টার থেকে অ্যাক্সেসযোগ্য হওয়া উচিত। আপনি যদি আপনার স্থানীয় পরিবেশে ডেটা ব্যবহার করে থাকেন, তাহলে আপনাকে Google ক্লাউড স্টোরেজের মতো দূরবর্তী সঞ্চয়স্থানে এটি আপলোড করতে হতে পারে। উদাহরণস্বরূপ, আমরা একটি ডিফল্ট বালতিতে পেঙ্গুইন ডেটা আপলোড করতে পারি যা স্বয়ংক্রিয়ভাবে তৈরি হয় যখন একটি Kubeflow পাইপলাইন ক্লাস্টার নিম্নলিখিত মত স্থাপন করা হয়।
gsutil cp data/data.csv gs://{GOOGLE_CLOUD_PROJECT}-kubeflowpipelines-default/tfx-template/data/penguin/
Copying file://data/data.csv [Content-Type=text/csv]... NotFoundException: 404 The destination bucket gs://tf-benchmark-dashboard-kubeflowpipelines-default does not exist or the write to the destination must be restarted
kubeflow_runner.py এ DATA_PATH এ সংরক্ষিত ডেটা অবস্থান আপডেট করুন।
আপনি যদি BigQueryExampleGen ব্যবহার করেন, তাহলে ডেটা ফাইল আপলোড করার প্রয়োজন নেই, তবে অনুগ্রহ করে নিশ্চিত করুন যে kubeflow_runner.py একই query ব্যবহার করে এবং pipeline.create_pipeline() ফাংশনের জন্য beam_pipeline_args আর্গুমেন্ট ব্যবহার করে।
পাইপলাইন স্থাপন করুন।
সবকিছু প্রস্তুত হলে, আপনি tfx pipeline create কমান্ড ব্যবহার করে একটি পাইপলাইন তৈরি করতে পারেন।
!tfx pipeline create \
--engine=kubeflow \
--pipeline-path=kubeflow_runner.py \
--endpoint={ENDPOINT} \
--build-target-image={CUSTOM_TFX_IMAGE}
CLI [Error] --build-target-image flag was DELETED. You should specify the build target image at the `KubeflowDagRunnerConfig` class instead, and use --build-image flag without argument to build a container image when creating or updating a pipeline.
এখন tfx run create কমান্ড ব্যবহার করে নতুন তৈরি পাইপলাইন দিয়ে একটি এক্সিকিউশন রান শুরু করুন।
tfx run create --engine=kubeflow --pipeline-name={PIPELINE_NAME} --endpoint={ENDPOINT}
CLI
Creating a run for pipeline: my_pipeline
Failed to load kube config.
Traceback (most recent call last):
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connection.py", line 175, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/util/connection.py", line 95, in create_connection
raise err
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/util/connection.py", line 85, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 710, in urlopen
chunked=chunked,
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 398, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/usr/lib/python3.7/http/client.py", line 1256, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1302, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1251, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.7/http/client.py", line 1030, in _send_output
self.send(msg)
File "/usr/lib/python3.7/http/client.py", line 970, in send
self.connect()
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connection.py", line 187, in _new_conn
self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7ff729e34190>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/tmpfs/src/tf_docs_env/bin/tfx", line 8, in <module>
sys.exit(cli_group())
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/decorators.py", line 73, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/tools/cli/commands/run.py", line 94, in create_run
handler = handler_factory.create_handler(ctx.flags_dict)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/tools/cli/handler/handler_factory.py", line 93, in create_handler
return kubeflow_handler.KubeflowHandler(flags_dict)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tfx/tools/cli/handler/kubeflow_handler.py", line 62, in __init__
namespace=self.flags_dict[labels.NAMESPACE])
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp/_client.py", line 197, in __init__
if not self._context_setting['namespace'] and self.get_kfp_healthz(
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp/_client.py", line 411, in get_kfp_healthz
response = self._healthz_api.get_healthz()
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/api/healthz_service_api.py", line 63, in get_healthz
return self.get_healthz_with_http_info(**kwargs) # noqa: E501
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/api/healthz_service_api.py", line 148, in get_healthz_with_http_info
collection_formats=collection_formats)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/api_client.py", line 369, in call_api
_preload_content, _request_timeout, _host)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/api_client.py", line 185, in __call_api
_request_timeout=_request_timeout)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/api_client.py", line 393, in request
headers=headers)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/rest.py", line 234, in GET
query_params=query_params)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/kfp_server_api/rest.py", line 212, in request
headers=headers)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/request.py", line 75, in request
method, url, fields=fields, headers=headers, **urlopen_kw
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/request.py", line 96, in request_encode_url
return self.urlopen(method, url, **extra_kw)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/poolmanager.py", line 375, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 826, in urlopen
**response_kw
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 826, in urlopen
**response_kw
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 826, in urlopen
**response_kw
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/connectionpool.py", line 786, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=80): Max retries exceeded with url: /apis/v1beta1/healthz (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ff729e34190>: Failed to establish a new connection: [Errno 111] Connection refused'))
অথবা, আপনি Kubeflow Pipelines ড্যাশবোর্ডেও পাইপলাইন চালাতে পারেন। নতুন রান Kubeflow Pipelines ড্যাশবোর্ডে Experiments -নিরীক্ষার অধীনে তালিকাভুক্ত করা হবে। পরীক্ষায় ক্লিক করলে আপনি অগ্রগতি নিরীক্ষণ করতে পারবেন এবং এক্সিকিউশন রানের সময় তৈরি আর্টিফ্যাক্টগুলিকে কল্পনা করতে পারবেন।
আপনি যদি কুবেফ্লো পাইপলাইনে আপনার পাইপলাইন চালাতে আগ্রহী হন, তাহলে ক্লাউড এআই প্ল্যাটফর্ম পাইপলাইন টিউটোরিয়ালে TFX-এ আরও নির্দেশাবলী খুঁজুন।
পরিষ্কার আপ
এই ধাপে ব্যবহৃত সমস্ত Google ক্লাউড সংস্থান পরিষ্কার করতে, আপনি টিউটোরিয়ালের জন্য ব্যবহার করা Google ক্লাউড প্রকল্পটি মুছে ফেলতে পারেন।
বিকল্পভাবে, আপনি প্রতিটি কনসোল পরিদর্শন করে পৃথক সম্পদ পরিষ্কার করতে পারেন:
TensorFlow.org এ দেখুন
Google Colab-এ চালান
GitHub-এ উৎস দেখুন
নোটবুক ডাউনলোড করুন