উন্নয়ন

ডকুমেন্টে বিভিন্ন প্ল্যাটফর্মে সোর্স থেকে ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ এবং tensorflow-io প্যাকেজ তৈরির জন্য প্রয়োজনীয় তথ্য রয়েছে। সেটআপ সম্পূর্ণ হয়ে গেলে অনুগ্রহ করে STYLE_GUIDE- এ নতুন অপ্স যোগ করার নির্দেশিকা দেখুন।

IDE সেটআপ

TensorFlow I/O ডেভেলপ করার জন্য ভিজ্যুয়াল স্টুডিও কোড কনফিগার করার নির্দেশাবলীর জন্য, অনুগ্রহ করে এই ডকটি পড়ুন।

লিন্ট

TensorFlow I/O-এর কোড Bazel Buildifier, Clang Format, Black, এবং Pyupgrade-এর সাথে সঙ্গতিপূর্ণ। উত্স কোড চেক করতে এবং লিন্ট সমস্যা সনাক্ত করতে নিম্নলিখিত কমান্ড ব্যবহার করুন:

# Install Bazel version specified in .bazelversion
$ curl -OL https://github.com/bazelbuild/bazel/releases/download/$(cat .bazelversion)/bazel-$(cat .bazelversion)-installer-darwin-x86_64.sh
$ sudo bash -x -e bazel-$(cat .bazelversion)-installer-darwin-x86_64.sh
$ bazel run //tools/lint:check

বেজেল বিল্ডিফায়ার এবং ক্ল্যাং ফরম্যাটের জন্য, নিম্নলিখিত কমান্ডটি স্বয়ংক্রিয়ভাবে কোনো লিন্ট ত্রুটি সনাক্ত করবে এবং ঠিক করবে:

$ bazel run //tools/lint:lint

বিকল্পভাবে, আপনি যদি শুধুমাত্র পৃথক লিন্টার ব্যবহার করে লিন্ট চেক করতে চান, তাহলে আপনি বেছে বেছে black , pyupgrade , bazel , বা উপরের কমান্ডগুলিতে clang পাস করতে পারেন৷

উদাহরণস্বরূপ, একটি black নির্দিষ্ট লিন্ট চেক ব্যবহার করে করা যেতে পারে:

$ bazel run //tools/lint:check -- black

ব্যাজেল বিল্ডিফায়ার এবং ক্ল্যাং ফরম্যাট ব্যবহার করে লিন্ট ফিক্স ব্যবহার করে করা যেতে পারে:

$ bazel run //tools/lint:lint -- bazel clang

একটি পৃথক পাইথন ফাইলের জন্য black এবং pyupgrade ব্যবহার করে লিন্ট চেক ব্যবহার করে করা যেতে পারে:

$ bazel run //tools/lint:check -- black pyupgrade -- tensorflow_io/python/ops/version_ops.py

লিন্ট কালো এবং পাইআপগ্রেড ব্যবহার করে একটি পৃথক পাইথন ফাইল ঠিক করে:

$ bazel run //tools/lint:lint -- black pyupgrade --  tensorflow_io/python/ops/version_ops.py

পাইথন

ম্যাক অপারেটিং সিস্টেম

macOS Catalina 10.15.7 এ, পাইথন 3.8.2 প্রদত্ত সিস্টেমের সাথে tensorflow-io তৈরি করা সম্ভব। এটি করার জন্য tensorflow এবং bazel উভয়ই প্রয়োজন।

#!/usr/bin/env bash

# Disable arm64 build by specifying only x86_64 arch.
# Only needed for macOS's system default python 3.8.2 on macOS 10.15.7
export ARCHFLAGS="-arch x86_64"

# Use following command to check if Xcode is correctly installed:
xcodebuild -version

# Show macOS's default python3
python3 --version

# Install Bazel version specified in .bazelversion
curl -OL https://github.com/bazelbuild/bazel/releases/download/$(cat .bazelversion)/bazel-$(cat .bazelversion)-installer-darwin-x86_64.sh
sudo bash -x -e bazel-$(cat .bazelversion)-installer-darwin-x86_64.sh

# Install tensorflow and configure bazel
sudo ./configure.sh

# Add any optimization on bazel command, e.g., --compilation_mode=opt,
#   --copt=-msse4.2, --remote_cache=, etc.
# export BAZEL_OPTIMIZATION=

# Build shared libraries
bazel build -s --verbose_failures $BAZEL_OPTIMIZATION //tensorflow_io/... //tensorflow_io_gcs_filesystem/...

# Once build is complete, shared libraries will be available in
# `bazel-bin/tensorflow_io/core`, `bazel-bin/tensorflow_io/python/ops` and
# it is possible to run tests with `pytest`, e.g.:
sudo python3 -m pip install pytest
TFIO_DATAPATH=bazel-bin python3 -m pytest -s -v tests/test_serialization.py
সমস্যা সমাধান

যদি Xcode ইনস্টল করা থাকে, কিন্তু $ xcodebuild -version প্রত্যাশিত আউটপুট প্রদর্শন না করে, তাহলে আপনাকে কমান্ডের সাথে Xcode কমান্ড লাইন সক্ষম করতে হতে পারে:

$ xcode-select -s /Applications/Xcode.app/Contents/Developer

পরিবর্তনগুলি কার্যকর করার জন্য একটি টার্মিনাল পুনরায় চালু করার প্রয়োজন হতে পারে৷

নমুনা আউটপুট:

$ xcodebuild -version
Xcode 12.2
Build version 12B45b

লিনাক্স

লিনাক্সে টেনসরফ্লো-আইওর বিকাশ ম্যাকওএসের মতো। প্রয়োজনীয় প্যাকেজগুলি হল gcc, g++, git, bazel এবং python 3। ডিফল্ট সিস্টেম ইনস্টল করা সংস্করণগুলি ব্যতীত gcc বা পাইথনের নতুন সংস্করণগুলির প্রয়োজন হতে পারে।

উবুন্টু 20.04

উবুন্টু 20.04 এর জন্য প্রয়োজন gcc/g++, git, এবং python 3। নিম্নলিখিতগুলি নির্ভরতা ইনস্টল করবে এবং উবুন্টু 20.04-এ শেয়ার্ড লাইব্রেরি তৈরি করবে:

#!/usr/bin/env bash

# Install gcc/g++, git, unzip/curl (for bazel), and python3
sudo apt-get -y -qq update
sudo apt-get -y -qq install gcc g++ git unzip curl python3-pip

# Install Bazel version specified in .bazelversion
curl -sSOL <a href="https://github.com/bazelbuild/bazel/releases/download/">https://github.com/bazelbuild/bazel/releases/download/</a>\\((cat .bazelversion)/bazel-\\)(cat .bazelversion)-installer-linux-x86_64.sh
sudo bash -x -e bazel-$(cat .bazelversion)-installer-linux-x86_64.sh

# Upgrade pip
sudo python3 -m pip install -U pip

# Install tensorflow and configure bazel
sudo ./configure.sh

# Alias python3 to python, needed by bazel
sudo ln -s /usr/bin/python3 /usr/bin/python

# Add any optimization on bazel command, e.g., --compilation_mode=opt,
#   --copt=-msse4.2, --remote_cache=, etc.
# export BAZEL_OPTIMIZATION=

# Build shared libraries
bazel build -s --verbose_failures $BAZEL_OPTIMIZATION //tensorflow_io/... //tensorflow_io_gcs_filesystem/...

# Once build is complete, shared libraries will be available in
# `bazel-bin/tensorflow_io/core`, `bazel-bin/tensorflow_io/python/ops` and
# it is possible to run tests with `pytest`, e.g.:
sudo python3 -m pip install pytest
TFIO_DATAPATH=bazel-bin python3 -m pytest -s -v tests/test_serialization.py
CentOS 8

CentOS 8 এর জন্য শেয়ার্ড লাইব্রেরি তৈরির ধাপগুলি উপরের উবুন্টু 20.04 এর মতই।

sudo yum install -y python3 python3-devel gcc gcc-c++ git unzip which make

পরিবর্তে gcc/g++, git, unzip/which (bazel এর জন্য), এবং python3 ইনস্টল করতে ব্যবহার করা উচিত।

CentOS 7

CentOS 7-এ, ডিফল্ট পাইথন এবং জিসিসি সংস্করণ টেনসরফ্লো-আইও-এর শেয়ার্ড লাইব্রেরি (.so) তৈরি করার জন্য খুব পুরানো। এর পরিবর্তে ডেভেলপার টুলসেট এবং rh-python36 দ্বারা প্রদত্ত gcc ব্যবহার করা উচিত। এছাড়াও, devtoolset দ্বারা CentOS বনাম নতুন gcc সংস্করণে ইনস্টল করা libstdc++ এর বৈপরীত্য এড়াতে libstdc++ স্ট্যাটিকভাবে লিঙ্ক করতে হবে।

তদ্ব্যতীত, ফাইল সিস্টেম প্লাগইনগুলির জন্য স্ট্যাটিকলি লিঙ্কযুক্ত লাইব্রেরিতে প্রতীকগুলির নকল এড়াতে একটি বিশেষ পতাকা --//tensorflow_io/core:static_build ব্যাজেলে পাস করতে হবে।

নিম্নলিখিতগুলি bazel, devtoolset-9, rh-python36 ইনস্টল করবে এবং শেয়ার্ড লাইব্রেরি তৈরি করবে:

#!/usr/bin/env bash

# Install centos-release-scl, then install gcc/g++ (devtoolset), git, and python 3
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-9 git rh-python36 make

# Install Bazel version specified in .bazelversion
curl -sSOL <a href="https://github.com/bazelbuild/bazel/releases/download/">https://github.com/bazelbuild/bazel/releases/download/</a>\\((cat .bazelversion)/bazel-\\)(cat .bazelversion)-installer-linux-x86_64.sh
sudo bash -x -e bazel-$(cat .bazelversion)-installer-linux-x86_64.sh

# Upgrade pip
scl enable rh-python36 devtoolset-9 \
    'python3 -m pip install -U pip'

# Install tensorflow and configure bazel with rh-python36
scl enable rh-python36 devtoolset-9 \
    './configure.sh'

# Add any optimization on bazel command, e.g., --compilation_mode=opt,
#   --copt=-msse4.2, --remote_cache=, etc.
# export BAZEL_OPTIMIZATION=

# Build shared libraries, notice the passing of --//tensorflow_io/core:static_build
BAZEL_LINKOPTS="-static-libstdc++ -static-libgcc" BAZEL_LINKLIBS="-lm -l%:libstdc++.a" \
  scl enable rh-python36 devtoolset-9 \
    'bazel build -s --verbose_failures $BAZEL_OPTIMIZATION --//tensorflow_io/core:static_build //tensorflow_io/...'

# Once build is complete, shared libraries will be available in
# `bazel-bin/tensorflow_io/core`, `bazel-bin/tensorflow_io/python/ops` and
# it is possible to run tests with `pytest`, e.g.:
scl enable rh-python36 devtoolset-9 \
    'python3 -m pip install pytest'

TFIO_DATAPATH=bazel-bin \
  scl enable rh-python36 devtoolset-9 \
    'python3 -m pytest -s -v tests/test_serialization.py'

ডকার

পাইথন ডেভেলপমেন্টের জন্য, উৎস থেকে TensorFlow I/O প্যাকেজ ( tensorflow-io ) তৈরি করতে এখানে একটি রেফারেন্স ডকারফাইল ব্যবহার করা যেতে পারে। উপরন্তু, প্রাক-নির্মিত উন্নয়ন চিত্রগুলিও ব্যবহার করা যেতে পারে:

# Pull (if necessary) and start the devel container
\\( docker run -it --rm --name tfio-dev --net=host -v \\){PWD}:/v -w /v tfsigio/tfio:latest-devel bash

# Inside the docker container, ./configure.sh will install TensorFlow or use existing install
(tfio-dev) root@docker-desktop:/v$ ./configure.sh

# Clean up exisiting bazel build's (if any)
(tfio-dev) root@docker-desktop:/v$ rm -rf bazel-*

# Build TensorFlow I/O C++. For compilation optimization flags, the default (-march=native)
# optimizes the generated code for your machine's CPU type.
# Reference: <a href="https://www.tensorflow.orginstall/source#configuration_options">https://www.tensorflow.orginstall/source#configuration_options</a>).

# NOTE: Based on the available resources, please change the number of job workers to:
# -j 4/8/16 to prevent bazel server terminations and resource oriented build errors.

(tfio-dev) root@docker-desktop:/v$ bazel build -j 8 --copt=-msse4.2 --copt=-mavx --compilation_mode=opt --verbose_failures --test_output=errors --crosstool_top=//third_party/toolchains/gcc7_manylinux2010:toolchain //tensorflow_io/... //tensorflow_io_gcs_filesystem/...


# Run tests with PyTest, note: some tests require launching additional containers to run (see below)
(tfio-dev) root@docker-desktop:/v$ pytest -s -v tests/
# Build the TensorFlow I/O package
(tfio-dev) root@docker-desktop:/v$ python setup.py bdist_wheel

একটি বিল্ড সফল হওয়ার পরে একটি প্যাকেজ ফাইল dist/tensorflow_io-*.whl তৈরি করা হবে।

পাইথন হুইলস

নিম্নলিখিত কমান্ডের সাহায্যে বেজেল বিল্ড সম্পূর্ণ হওয়ার পরে পাইথন চাকা তৈরি করা সম্ভব:

$ python setup.py bdist_wheel --data bazel-bin

.whl ফাইলটি dist ডিরেক্টরিতে পাওয়া যাবে। নোট করুন bazel বাইনারি ডিরেক্টরি bazel-bin --data args দিয়ে পাস করতে হবে যাতে setup.py প্রয়োজনীয় শেয়ার অবজেক্টগুলি সনাক্ত করতে পারে, কারণ bazel-bin tensorflow_io প্যাকেজ ডিরেক্টরির বাইরে।

বিকল্পভাবে, উৎস ইনস্টল করা যেতে পারে:

$ TFIO_DATAPATH=bazel-bin python -m pip install .

TFIO_DATAPATH=bazel-bin সাথে একই কারণে পাস করা হয়েছে।

-e দিয়ে নোট ইনস্টল করা উপরের থেকে আলাদা। দ্য

$ TFIO_DATAPATH=bazel-bin python -m pip install -e .

TFIO_DATAPATH=bazel-bin দিয়েও শেয়ার করা অবজেক্ট স্বয়ংক্রিয়ভাবে ইনস্টল করবে না। পরিবর্তে, ইনস্টল করার পর প্রোগ্রাম চালানোর সময় প্রতিবার TFIO_DATAPATH=bazel-bin পাস করতে হবে:

$ TFIO_DATAPATH=bazel-bin python

>>> import tensorflow_io as tfio
>>> ...

পরীক্ষামূলক

কিছু পরীক্ষার জন্য একটি পরীক্ষা কন্টেইনার চালু করতে হবে বা চালানোর আগে সংশ্লিষ্ট টুলের একটি স্থানীয় উদাহরণ শুরু করতে হবে। উদাহরণস্বরূপ, কাফকা সম্পর্কিত পরীক্ষা চালানোর জন্য যা কাফকা, চিড়িয়াখানা এবং স্কিমা-রেজিস্ট্রির একটি স্থানীয় উদাহরণ শুরু করবে, ব্যবহার করুন:

# Start the local instances of kafka, zookeeper and schema-registry
$ bash -x -e tests/test_kafka/kafka_test.sh

# Run the tests
$ TFIO_DATAPATH=bazel-bin pytest -s -vv tests/test_kafka.py

Elasticsearch বা MongoDB মতো সরঞ্জামগুলির সাথে সম্পর্কিত Datasets পরীক্ষা করার জন্য সিস্টেমে ডকার উপলব্ধ থাকতে হবে। এই ধরনের পরিস্থিতিতে, ব্যবহার করুন:

# Start elasticsearch within docker container
$ bash tests/test_elasticsearch/elasticsearch_test.sh start

# Run the tests
$ TFIO_DATAPATH=bazel-bin pytest -s -vv tests/test_elasticsearch.py

# Stop and remove the container
$ bash tests/test_elasticsearch/elasticsearch_test.sh stop

অতিরিক্তভাবে, tensorflow-io এর কিছু বৈশিষ্ট্য পরীক্ষা করার জন্য আপনাকে কোনো অতিরিক্ত টুল স্পিন আপ করতে হবে না কারণ ডেটা tests ডিরেক্টরিতেই দেওয়া হয়েছে। উদাহরণস্বরূপ, parquet dataset এর সাথে সম্পর্কিত পরীক্ষা চালানোর জন্য, ব্যবহার করুন:

# Just run the test
$ TFIO_DATAPATH=bazel-bin pytest -s -vv tests/test_parquet.py

আর

আমরা আপনার জন্য এখানে একটি রেফারেন্স ডকারফাইল প্রদান করি যাতে আপনি পরীক্ষার জন্য সরাসরি R প্যাকেজ ব্যবহার করতে পারেন। আপনি এর মাধ্যমে এটি তৈরি করতে পারেন:

$ docker build -t tfio-r-dev -f R-package/scripts/Dockerfile .

কন্টেইনারের ভিতরে, আপনি আপনার R সেশন শুরু করতে পারেন, Hadoop SequenceFile string.seq এর উদাহরণ থেকে একটি SequenceFileDataset ইনস্ট্যান্টিয়েট করতে পারেন এবং তারপরে ডেটাসেটে tfdatasets প্যাকেজ দ্বারা প্রদত্ত যেকোন রূপান্তর ফাংশন ব্যবহার করতে পারেন যেমন:

library(tfio)
dataset <- sequence_file_dataset("R-package/tests/testthat/testdata/string.seq") %>%
    dataset_repeat(2)

sess <- tf$Session()
iterator <- make_iterator_one_shot(dataset)
next_batch <- iterator_get_next(iterator)

until_out_of_range({
  batch <- sess$run(next_batch)
  print(batch)
})