2

我們正嘗試在線提供圖像處理模型(在Tensorflow中),以便我們不必向外部調用REST服務或雲-ML/ML-Engine模型由於速度的目的。Python Beam無法泡菜/蒔蘿大型Tensorflow模型

與其試圖在每個推理中加載模型,我們想測試我們是否可以將模型加載到每個beam.DoFn對象的內存中,這樣我們可以減少加載和服務該模型的時間。

例如

from __future__ import absolute_import 
    from __future__ import division 
    from __future__ import print_function 

    import tensorflow as tf 
    import numpy as np 


    class InferenceFn(object): 

     def __init__(self, model_full_path,): 
     super(InferenceFn, self).__init__() 
     self.model_full_path = model_full_path 
     self.graph = None 
     self.create_graph() 


     def create_graph(self): 
     if not tf.gfile.FastGFile(self.model_full_path): 
      self.download_model_file() 
     with tf.Graph().as_default() as graph: 
      with tf.gfile.FastGFile(self.model_full_path, 'rb') as f: 
      graph_def = tf.GraphDef() 
      graph_def.ParseFromString(f.read()) 
      _ = tf.import_graph_def(graph_def, name='') 
     self.graph = graph 

這是能夠在本地運行的時候,它不是一個beam.DoFn,只是一個普通班,但是當其轉換到一個DOFN,我嘗試使用雲數據流遠程執行它,作業失敗,因爲只是罰款在序列化/酸洗期間,我想相信它試圖序列化整個模型

例如 Example of Error

有沒有辦法規避這種情況或防止python/dataflow試圖序列化模型?

回答

1

是的 - 將模型存儲爲DoFn上的字段需要將其序列化以便將該代碼獲取到每個工作人員上。您應該看看以下內容:

  1. 安排讓每個工人都可以使用模型文件。這在Python dependencies document中描述了Dataflow。
  2. 在您的DoFn中實現start_bundle方法,並讓它讀取文件並將其存儲在本地線程中。

這保證了文件的內容是不是你的本地計算機和醃上閱讀,而是將文件提供給每一個工人,然後在讀。

+0

的start_bundle功能工作。問題在於我們試圖提供的模型文件的深度。 – bR3nD4n