私は、機械学習/深層学習の分野に入るために Torch7 の学習を始めていますが、それが魅力的だと感じています (そして非常に複雑です (笑))。ただし、私の主な関心事は、この学習をアプリケーションに変換できるかどうかです。主に、Torch7 Lua スクリプトを、アプリが機械学習計算を実行するために使用できるサーバーに変換できますか? 可能であれば、どのように?
ありがとうございました
ワッフルを使用できます。そのページの Hello World の例を次に示します。
local app = require('waffle')
app.get('/', function(req, res)
res.send('Hello World!')
end)
app.listen()
あなたのアルゴリズムが単純な顔検出器であるとしましょう。入力は画像で、出力は JSON 形式の顔検出です。次のことができます。
local app = require('waffle')
require 'graphicsmagick'
require 'MyAlgorithm'
app.post('/', function(req, res)
local img, detections, outputJson
img = req.form.image_file:toImage()
detections = MyAlgorithm.detect(img:double())
outputJson = {}
if (detections ~= nil) then
outputJson.faceInPicture = true
outputJson.faceDetections = detections
else
outputJson.faceInPicture = false
outputJson.faceDetections = nil
end
res.json(outputJson)
end)
app.listen()
そうすれば、アルゴリズムを独立したサービスとして使用できます。
torch でテストしたasyncパッケージを使用することもできます。
Torch をライブラリとして見る必要があります (スタンドアロンの実行可能ファイルとしてアクセスしている場合でも)。このライブラリは、HTTP 経由でアクセスできる一部の Lua コードから使用できます。Lua コードは、すべての HTTP 対話を処理するOpenResty内で実行されている可能性があり、LuaJIT を使用するように OpenResty を構成できるのと同じパフォーマンスが得られます。
もう 1 つのオプションは、luasocket および copas ライブラリ (たとえば、 Xavante )に基づく HTTP 処理を使用するか、 LuaWebserverページにリストされているオプションのいずれかを使用することです。
非同期とワッフルの両方が優れたオプションです。別のオプションは、ZeroMQ + Protocol Buffersを使用することです。お好みの Web 開発環境が何であれ、非同期で ZeroMQ を使用してリクエストを Torch に送信し、おそらくプロトコル バッファでメッセージをシリアル化し、Torch で各リクエストを処理して結果を返すことができます。
このようにして、 waffleの 20K fib テストよりもはるかに高いスループットを得ることができました。