自由に移植できるディープラーニングサービス
2962 ワード
辛苦して模型を作って、サンプリングして、パラメータを調整して、討論して、ドキュメントを書きます.....模型はついにオンラインになります~何?
Version `GLIBC_x.xx` not found
サービスできません!!!また爱せるかな?
痛みはどこにあるの生産環境機械は古く、gccは古く、glibcも古く、基本的に2.12以下 である.サービスはjavaまたはc++を使用するか、pythonサービスは頼りにならない.演算効率は少なくとも10倍 悪い.速度が速く、操作が簡単で、安定しなければならない.データ量が大きくなると崩れてしまうに違いない.
どうしよう
ここでは、本当に移植可能なサービスプランを示します. は順方向伝搬アルゴリズムを実現し、c++とjavaにはマトリクス演算パケットがあり、モデルが複雑でなければ、これは最も軽量な と言える. javaフレームdl 4 jを介してトレーニングを行い、その後、jvm移植性はカバーの ではない.静的にglibcをコンパイルした後、c++のtensorflowまたはtiny-dnnを用いて訓練を行い、 サービスを提供する. kerasにより各フレーム間のモデル変換を実現し、tensorflow、dl 4 jの各種切替を最適なフレームで訓練し、サービス を提供する. hive streamingによりtensorflowのオフラインサービスを実現し、データ量が大きくても を恐れない. dockerを使用して専門的な環境を構築し、tensorflow、tiny-dnnサービスを使用してもglibcを静的にコンパイルする必要はありません. このいくつかの案は私の后ろのブログでフォローしますので、楽しみにしていてください.
しかし私はpythonを使いたい、tensorflowでモデルを訓練したい、tensorboardを見たい、そしてkerasでやりたくない、これが本文の中心思想です.
JAva直接読み出しtensorflowモデル
シナリオの利点はスピードが速く、ローカルとの差は多くない hiveのudfに書けば、分布式の利点も借りられ、ビッグデータ量を走っても は怖くない.
tensorflowにはjavaインタフェースがあるのではないでしょうか.申し訳ありませんが、このjavaインタフェースとは、一部jni実装、すなわちc++であり、ローカルのダイナミックリンクライブラリ、サービスを呼び出すとき、またはhive udfと書くとき、Version`GLIBC_x.xx`not foundはあなたに人間として教えます
じつコード
maven依存
モデルの読み込み
単一スレッド呼び出しのみの場合、これで使用できます.同時実行を行うには、追加の処理にコードが必要です.私のgithubが書いた例udf同時呼び出しtensorflowモデルのhive UDF例を参照してください.
いささか欠点がある batch_はサポートされていません.normalization 現在nd 4 jがtensorflowを読み出すと、tfにbatch_が役に立つ場合normalization、予測時にmoving_を更新できないのでvarianceとmoving_meanは、トレーニング、予測を区別する必要があるため、tfのbnインタフェースはtraining=Falseを入力する必要がある.これはboolタイプのplaceholderに入力することによって解決できるが、nd 4 jのtfインタフェースはbool値およびbool演算を一時的にサポートしない.だから、しばらくbatch_を使わないでください.normalization、その後新しいソリューションが最初に更新されますで出されたパケットは比較的大きく、platformメソッドであり、各種のcpuのサポートが含まれており、自然に大きく、280 m以上jarパケットの大きさに依存して以下のように変更する必要がある場合、linux上でmvnでパッケージ化するように生成されたパケットは50 m以内であり、linuxのcpuのみに対応するため、自然に より小さくなる
リファレンスリンク
[1]公式サイトgithub上の例[2]tensorflowモデルを同時に呼び出すhive UDF例
Version `GLIBC_x.xx` not found
サービスできません!!!また爱せるかな?
痛みはどこにあるの
どうしよう
ここでは、本当に移植可能なサービスプランを示します.
しかし私はpythonを使いたい、tensorflowでモデルを訓練したい、tensorboardを見たい、そしてkerasでやりたくない、これが本文の中心思想です.
JAva直接読み出しtensorflowモデル
シナリオの利点
tensorflowにはjavaインタフェースがあるのではないでしょうか.申し訳ありませんが、このjavaインタフェースとは、一部jni実装、すなわちc++であり、ローカルのダイナミックリンクライブラリ、サービスを呼び出すとき、またはhive udfと書くとき、Version`GLIBC_x.xx`not foundはあなたに人間として教えます
じつコード
maven依存
org.nd4j
nd4j-native-platform
1.0.0-beta2
nd 4 j呼び出しpbモデルモデルの読み込み
private SameDiff graph = TFGraphMapper.getInstance().importGraph(new File(pbModelPath));
tensorの取得// tensor_name tensor
SDVariable inTensor = graph.getVariable("input");
SDVariable outTensor = graph.getVariable("prediction");
tensorに値を書く//feature float[]
inTensor.setArray(Nd4j.create(feature).reshape(-1, 1));
出力値を取得//eval() nd4j , softmax , logit,
float output = outTensor.eval().getFloat(0);
こんなに簡単で、すべてがこんなに簡単だったはずだ.単一スレッド呼び出しのみの場合、これで使用できます.同時実行を行うには、追加の処理にコードが必要です.私のgithubが書いた例udf同時呼び出しtensorflowモデルのhive UDF例を参照してください.
いささか欠点がある
org.nd4j
nd4j-native
1.0.0-beta2
楽しいtf boyになってください><私のホームページへようこそhttps://duanyy.xyzリファレンスリンク
[1]公式サイトgithub上の例[2]tensorflowモデルを同時に呼び出すhive UDF例