見出し画像

TWSNMP FC: brain.jsの組み込み GPUの方が遅いのに驚いた

今朝は3時半に猫が起こしてくれました。今日からTWSNMP FCにbrain.js

を組み込むことを察知して早く起こしてくれたのかもしれません。

brain.jsは、JavaScriptでニューラルネットワーク(AIの一種)を実現するものです。一応GPUに対応していると書いてます。TWSNMP FCに組み込むには、

のドキュメントに書いてあるように、

npm install brain.js

のコマンドでインストールできますが、

import * as brain from 'brain.js'

のように使おうとするとエラーになります。Googleさんに聞いて、

import * as brain from 'brain.js/src/index'

とするとエラーがなくなることがわかりました。理由はわかりませんが、おまじないだと思っています。本当はちゃんと調べたほうがよいかもしれません。
TWSNMP FCのポーリングやログをAIで分析するという本来の目的を作る前にサンプルプログラムをnuxt+vuetifyの環境で動かしてCPUとGPUの動作を可視化してみることにしました。作ったテストプログラムは、

const testBrain = (divError, divModel) => {
 makeErrorChart(divError)
 console.log('start')
 const netCPU = new brain.NeuralNetwork()
 const netGPU = new brain.NeuralNetworkGPU()
 const xorTrainingData = [
   { input: [0, 0], output: [0] },
   { input: [0, 1], output: [1] },
   { input: [1, 0], output: [1] },
   { input: [1, 1], output: [0] },
 ]
 const dataGPU = []
 const dataCPU = []
 netCPU.train(xorTrainingData, {
   callback: (p) => {
     const t = new Date()
     dataCPU.push({
       name: echarts.time.format(t, '{yyyy}/{MM}/{dd} {HH}:{mm}:{ss}'),
       value: [t, p.error],
     })
     console.log(p)
   },
 })
 netGPU.train(xorTrainingData, {
   callback: (p) => {
     const t = new Date()
     dataGPU.push({
       name: echarts.time.format(t, '{yyyy}/{MM}/{dd} {HH}:{mm}:{ss}'),
       value: [t, p.error],
     })
     console.log(p)
   },
 })
 chart.setOption({
   series: [
     {
       data: dataCPU,
     },
     {
       data: dataGPU,
     },
   ],
 })

 console.log(netCPU.run([0, 0]))
 console.log(netGPU.run([0, 1]))
 const model = document.getElementById(divModel)
 if (model) {
   model.innerHTML = brain.utilities.toSVG(netGPU)
 }
}

です。XORのデータを同じ条件で学習させて学習状況をグラフに書いてみました。

画像1

なんと赤い線のGPUのほうが遅いという結果になりました。理由はわかりませんが、まだbrain.jsをGPUモードで使うのはやめておいたほうがよさそうです。
とりあえず、brain.jsが使えるようになったので、

・復刻版でTensorflow.jsを使って作った異常検知のAIを移植する
・LSTMを使って異常検知のAIを作る
・LSTMを使ってsyslogの分類を助けてくれるAIを作る

という目標で開発しようと思っています。
今朝は、ここまで、明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。