質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

276閲覧

TensorFlow のユーザー入力に predict 結果を伝えるプログラムのレスポンスを上げる方法。

elsticUser

総合スコア16

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2022/06/19 03:46

 お世話になります。内山と申します。よろしくお願いします。
この四月より機械学習の勉強を始めました。機械翻訳の tensorflow2 の
プログラム
https://www.tensorflow.org/tutorials/text/nmt_with_attention?hl=ja
のページを改修して、日本語入力の英語訳の学習をさせました。
プログラムの中で、checkpoint で学習状況を保存しているので、
checkpoint のデータを使って、英訳を行うプログラムを、上記ウェブページ
を参考に python3 で作りました。一番最初に
import tensorflow as tf
としております。
どうやら、この import tesorflow などに時間がかかり、phtyon で作った
英訳プログラムの実行に最初、8秒程度かかっていました。最初に
tensorflow serving を使ったプログラムを作れないかやってみました。
@tf.function の中に、tf 関数以外が入ると駄目のようで断念しました。
次に、他の import を削って、レスポンスは5秒程度になりましたが、
import tensorflow を削ることはできず、どうしても時間がかかります。
pip で、普通のDLでインストールした tensorflow は 450MB くらいで、
自分で tensorflow をコンパイルすると160MB くらいだという情報があり、
Linux 上で自分で、tensorflow をコンパイルしてみましたが、5秒程度は
あまり変わりません。1秒程度にしたいと考えております。
皆様が、tensorflow を用いて、ユーザー入力に対してpredict の結果を
お知らせするプログラムは、どのようにしてレスポンスを上げています
でしょうか。ご教示板だければ幸いです。よろしくお願いいたします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

import tesorflow などに時間がかかり

Googleなど世界の深層学習の頭脳が寄ってたかって作られたものがTensorflowやPyTorchです。これらをインポートせずに自力で最小限のモジュールを作れる技量があるのは、Darknetの人だとか、Chainerを作ったPFNの人たちくらいなものです。どれだけのことが求めらるのか想像もつきませんが、成果物を見ればどれだけ彼らが仙人のような知識と技量の持ち主かがわかると思います。

仮に彼らの真似事をしてTensorflowやPyTorchの代替ソフトを自力実装できたとしても、彼らのプログラムよりスマートかつ高速には恐らくできません。バグも多いでしょう。

このような理由から、TensorflowやPyTorchが複雑化・肥大化して初期のロードに時間がかかることがあるとしても、それでもインポートする価値があると思います。

tensorflow を用いて、ユーザー入力に対してpredict の結果をお知らせするプログラムは、どのようにしてレスポンスを上げています

「都度importしてから推論」では重い、ということであれば、「推論プログラムをサーバ化(常に推論用データが送られてくるのを待つように)してしまい、データを別プロセス経由で突っ込んだら推論する」、というように変えればimport部分の時間は(import後に常に待機する形になるので)丸ごと端折れます。ソケット通信は文字列を送るには十分すぎるくらい早いですので、正味かかる時間はTensorflowのデータ読み込み~推論の時間だけです。

擬似コード

Python3

1import tensorflow as tf 2# 以下略 3 4while True: 5 pass 6 # ここにsocket通信の処理を挟み、データがくるまで待機する 7 # データが来たらtensorflowの推論に移る

力技

力技ですが、推論すら早くしたい、ということでしたらGPUを見直してください

凡例: GeForce ○TX ×××× (Ti)

  • ○TXの部分が、GTX < RTX の順番で性能がよいです。
  • ××××の部分は数字が大きいほど性能が良いです。例えば1000より1500みたいなイメージです。
  • (Ti)の部分にTiが付くと性能が良いです。無印が通常ラインナップ(?)になります。※ただし、GTXの最上位モデル1080Tiの方が、後から出てきたRTX2000何とか(無印)よりも性能がイイみたいな例は若干あります。

このほかに、個人で買える額のGPUではありませんが、GeForceシリーズの上にQuadroシリーズと、A100のような短い名前のシリーズがあります。

  • Quadroシリーズ:「エラー耐性が高く、とにかく精密にデータを扱いたい」という思想の元に作られたCAD用のモデルらしく、機械学習目的でQuadroを買うと痛い目に合うそうです(値段2倍、深層学習での性能はトントン、メモリが巨大くらいしかメリットがない)。(値段的にはGeForceシリーズの数倍以上、と思っています。)
  • A100のような短い名前のシリーズ:性能は格段に良いですが、ドライヤーみたいな電力を食いますし、値段もゼロが1つ多いオーダーです。

どれくらい違いがあるかわかりませんが、GoogleはTPUを自前で用意しました。Googleが一般向けに販売するとは思えませんが、もしTPUが販売されればGPUよりも動作が早い「かも」しれません。

投稿2022/06/19 09:04

編集2022/06/19 09:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

elsticUser

2022/06/19 11:06

ご指導いただきましてありがとうございます。TCP/IPソケット通信のプログラムを書くのは大変なので、flask を PHP から curl で呼ぶ方向でテストをしています。curl( $ch, CURL_OPT_URL, 'http://127.0.0.1:8888/processing?text=文章' )みたいな感じです。flask のプログラムは、前半部分でtensorflow やファイルを読み込み`app.route("/processing",method=["get"]) で、翻訳処理をして、return result で、php に翻訳結果を返して、受け取った PHP が結果を表示するようなことを考えています。実際にできたら、結果を報告できればと思います。
退会済みユーザー

退会済みユーザー

2022/06/19 21:28

参考: > TCP/IPソケット通信のプログラムを書くのは大変 見た目がどうこうの問題が起きるかもしれませんが、ソケット通信のプログラム自体は受信も送信もほぼほぼお決まりの書き方をした10行くらいのコードで実装できます。 例: https://dev.classmethod.jp/articles/python3socketserver/ flaskを使った場合でも、推論するプロセスをマルチプロセスか別スレッドで走らせる部分は(先にインポートを済ませようとすると)共通と思います。 https://docs.python.org/ja/3/library/multiprocessing.html
elsticUser

2022/06/20 11:28

ご指導ありがとうございます。本日、2022年6月20日、Windows Desktop マシンの IIS のhtml ファイルから ajax で、/honnyaku へと機械翻訳リクエストをだし、リバースプロキシ―で Linux マシンの python、flask の機械翻訳プログラムでリクエストに翻訳結果を返すというシステムで、レスポンス1秒以内を達成できました。flask の同時アクセス対応は、オプション指定だけでできるようです。https://qiita.com/5zm/items/251be97d2800bf67b1c6
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問