Docker ile Geliştirme

Bir geliştirme görüntüsünün çekilmesi

TensorFlow Hizmetini oluşturabileceğiniz bir geliştirme ortamı için şunları deneyebilirsiniz:

docker pull tensorflow/serving:latest-devel

GPU desteğiyle TensorFlow Hizmetini oluşturabileceğiniz bir geliştirme ortamı için şunu kullanın:

docker pull tensorflow/serving:latest-devel-gpu

Çekebileceğiniz diğer görüntü sürümleri için Docker Hub tensor akışı/sunum deposuna bakın.

Geliştirme örneği

Geliştirme Docker görüntülerinden birini çektikten sonra, bunu gRPC bağlantı noktasını (8500) açarken çalıştırabilirsiniz:

docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel

Geliştirme ortamını test etme

Bir modeli test etmek için kabın içinden şunu deneyin:

# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

Docker dosyaları

Şu anda aşağıdaki Docker dosyalarının bakımını yapıyoruz:

  • TensorFlow Serving'in yüklü olduğu minimal bir VM olan Dockerfile .

  • nvidia-docker ile kullanılmak üzere GPU desteğine sahip TensorFlow Hizmetine sahip minimal bir VM olan Dockerfile.gpu .

  • TensorFlow Hizmetini oluşturmak için gereken tüm bağımlılıklara sahip minimum bir VM olan Dockerfile.devel .

  • GPU desteğiyle TensorFlow Sunumu oluşturmak için gereken tüm bağımlılıklara sahip minimum bir VM olan Dockerfile.devel-gpu .

Dockerfile'dan konteyner oluşturma

Bir Docker dosyasından kendi Docker görüntünüzü oluşturmak istiyorsanız bunu Docker build komutunu çalıştırarak yapabilirsiniz:

Dockerfile :

docker build --pull -t $USER/tensorflow-serving .

Dockerfile.gpu :

docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .

Dockerfile.devel :

docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .

Dockerfile.devel-gpu :

docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .

İPUCU: Bir görüntü oluşturmaya çalışmadan önce, ihtiyaçlarınızı karşılayan bir görüntünün halihazırda mevcut olmadığından emin olmak için Docker Hub tensor akışını/sunum deposunu kontrol edin.

Kaynaklardan derlemek çok fazla RAM tüketir. Sisteminizde RAM sorunu varsa Bazel'i çağırırken --local_ram_resources=2048 belirterek RAM kullanımını sınırlayabilirsiniz. Daha fazla bilgi için Bazel belgelerine bakın. TensorFlow Hizmetini oluşturduğunuz optimizasyonlarda ince ayar yapmak için aynı mekanizmayı kullanabilirsiniz. Örneğin:

docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
  --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
  $USER/tensorflow-serving-devel -f Dockerfile.devel .

Bir konteyneri çalıştırma

Bu, Dockerfile.devel kapsayıcısını oluşturduğunuzu varsayar.

GRPC bağlantı noktasını (8500) açan kapsayıcıyı çalıştırmak için:

docker run -it -p 8500:8500 $USER/tensorflow-serving-devel

İPUCU: Bir GPU görüntüsü çalıştırıyorsanız, NVIDIA runtime --runtime=nvidia kullanarak çalıştırdığınızdan emin olun.

Buradan bir geliştirme ortamını test etmeye yönelik talimatları takip edebilirsiniz.

Optimize edilmiş bir sunum ikili programı oluşturma

TensorFlow Serving'in ModelServer'ını çalıştırırken şuna benzeyen bir günlük mesajı görebilirsiniz:

I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA

Bu, ModelServer ikili dosyanızın üzerinde çalıştığı CPU için tam olarak optimize edilmediğini gösterir. Sunduğunuz modele bağlı olarak daha fazla optimizasyon gerekmeyebilir. Ancak optimize edilmiş bir ikili dosya oluşturmak oldukça basittir.

Sağlanan Dockerfile.devel veya Dockerfile.devel-gpu dosyalarından bir Docker görüntüsü oluştururken, ModelServer ikili dosyası -march=native bayrağıyla oluşturulacaktır. Bu, Bazel'in, Docker görüntüsünü oluşturduğunuz ana bilgisayarın desteklediği tüm CPU optimizasyonlarını içeren bir ModelServer ikili dosyası oluşturmasına neden olacaktır.

Barındırıcınız için tamamen optimize edilmiş bir sunum görüntüsü oluşturmak için şunları yapmanız yeterlidir:

  1. TensorFlow Serving projesini klonlayın

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. Optimize edilmiş bir ModelServer ile bir görüntü oluşturun

    • CPU için:

      docker build --pull -t $USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile.devel .
      
    • GPU için: `

      docker build --pull -t $USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
      
  3. Geliştirme görselini temel alarak bir sunum görseli oluşturun

    • CPU için:

      docker build -t $USER/tensorflow-serving \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile .
      

      Optimize edilmiş yeni Docker görüntünüz artık $USER/tensorflow-serving oldu ve bunu standart tensorflow/serving:latest görüntüsünde olduğu gibi kullanabilirsiniz .

    • GPU için:

      docker build -t $USER/tensorflow-serving-gpu \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.gpu .
      

      Optimize edilmiş yeni Docker görüntünüz artık $USER/tensorflow-serving-gpu oldu ve bunu standart tensorflow/serving:latest-gpu görüntüsünde olduğu gibi kullanabilirsiniz .