AWSのlambdaでJavaを使う

ちょっとハマったのでメモ。JavaはMavenでコンパイルします。

Test.java

pom.xml

コンパイル

Lambdaへアップロード

  • zipファイルをアップロード
  • Configulationを設定
  • RuntimeJava 8
    Handlercom.example.Test::handler

     これで動きます。テストの際に与えるパラメタの値が表示されます

torchをeclipseでデバッグ

torchというディープラーニングのライブラリが有ります。Luaで書かれているようであまり馴染みがなかったのですが、論文を読んでいて、サンプルをどうしても動かしたくてデバッグできる環境の構築を行った時のメモです

環境

  • MacOS Seirra 10.12.4
  • eclipse 4.6.3

こちらにubuntuの場合の設定方法があるのですが、Macではちょっと違いました。

luaインストール

これだけです

torchインストール

公式の手順通りにやれば問題なく終了します。

eclipseプラグイン

下記URLからLuaプラグインをインストールします。1.4.1が最新でした
http://download.eclipse.org/ldt/releases/milestones/

eclipseの設定

これが一番ハマりました。

環境設定 > Lua > Interpreters で Addで追加します。

Interpreter typeLua JIT 2.0
Interpreter executable/Users/yourname/torch/install/bin/luajit
Interpreter name Lua JIT
interpreter arguments-lenv -e “io.stdout:setvbuf(‘no’); if os.getenv(‘DEBUG_MODE’) then require ‘debugger’ ; require ‘debugger.plugins.ffi’end”
Linked Execution Environmentlua-5.1

また、Import…で/Users/yourname/torch/install/bin/torch-activateをインポートし環境変数を追加します

実行

こちらのサンプルを動かしてみます。
EclipseでLuaプロジェクトを作成し、srcディレクトリ内にファイルを作成します。
ここでポイントは、ファイルのパスをコード中に記述する際にはプロジェクトのトップからの相対パスを書きます。

download.py

右クリックのRunで実行できます

Tensorflowのエラー

Tensorflowをバージョンアップすると、昔動いていたスクリプトが動かなくなったりします

こんなエラーとか。

こちらを参照し修正します。

これを

これに変更

Maven起動時のエラー

Mavenの起動時にエラーが出たのでメモ

エラーメッセージ

対応方法

こちらを参考に

omp4jによる並列化

Pythonで並列化させたプログラムを走らせていたのですがあまりの遅さにJavaへと変更した際、並列化をomp4jで簡単にできたのでメモ。

omp4j

OpenMPの説明は、Wikipediaをみてもらうことにして、ソースコード中にコメントを書いておいて、コンパイルをすれば並列化プログラムの出来上がるという便利なライブラリ。

ここからJarファイルをダウンロードします。

Javaプログラム

簡単なプログラムを作成します。スレッド5で10回計算しています。

シングルスレッド

普通にコンパイルします。シングルスレッドで動作します。

シリアルに計算されているのがわかります。

マルチスレッド

並列化できるようにコンパイルします。

並列に計算できているのがわかります。
実際にはコンパイル時にコードを変換してコンパイルしています。
ここにソースコードを貼り付けると変換後のソースが表示されます。上記サンプルだとエラーになってしまいましたが、簡単なコードならばそのコードが表示されます。

まとめ

簡単にJavaのコードが並列化できます。色々と制約はありますが(変数関連など)、簡単に並列プログラムが作成できるのはメリットでしょう。

SQLiteをPythonからインメモリで使う

SQLite、手軽で便利なデータベースですが激しく使っていると速度が気になる時もあります。

SQLiteはインメモリデータベースもサポートしているので、既存のSQLiteのデータベースからインメモリ化して読み取り専用にすると早くなります。

データベース準備

適当に大きなデータベースを用意します。

1000万レコードのデータベースを作成しました。

プログラム

こちらを参考にプログラムを作成します。

conのコネクションが通常のデータベースアクセス、mconがデータベースファイルをインメモリ化したものになります。10000回ランダムにSELECTしてみます。

結果

大学のスパコンで計算したのですが2倍以上の差が出ました。

Rをソースコードからインストール

スーパーユーザ権限のないサーバにソースコードからインストールしてみたのでそのメモ

大学のサーバなど勝手になんでもインストールできない環境ではローカルのユーザ環境に色々とインストールしないといけません。今回はRをインストールしてみました

Rの取得

cranからRのソースコードをダウンロードしコンパイルします

エラーになります

足りないライブラリを入れていきます

bzip2

このあたりを参考にMakefileを修正しておきます。CFLAGSに-fPICを追加します

makeします

Rのconfigを再開します。この際、オプションにライブラリのパスを入れます

またエラーです

xz

xzライブラリを入れます。

Rのconfigを再開

またエラー

pcre

pcreライブラリを入れる。ここで、UTF8を有効にしておきます

Rのconfigを再開

またエラーです

curl

Rのconfigを再開

成功しました

コンパイル

またエラー。。

これは使っているGCCとそのライブラリがずれていたためでした。
LD_LIBRARY_PATHに使っているGCCのライブラリパスを前の方に追加し再度make

これでOKです。

RASPBIAN JESSIEでSSH接続

ちょっとはまりました。

RASPBIAN JESSIEの2016-11-25バージョンではデフォルトでSSH接続が外部からできなくなってしまいました。

外部から接続しようとするとこんな感じ

どうやら仕様変更があったようです
http://downloads.raspberrypi.org/raspbian/release_notes.txt

解決方法はブートパーテーションにsshという名のファイルを作るだけ。

セキュリティのためとはわかりますが、いきなり塞がれると困ってしまいました。

Rで株価データ取得

Rで株価データの取得のメモ
quantmodは素晴らしい!!

DOW

DowはYahoo.comから取得します。srcに”yahoo”をセット

デフォルトの名前では使いづらいので、必要なデータを別のデータフレームに入れて名前をつけます。

取得するデータはxts型ですので扱いやすいです

日本株

日本株はsrcにyahoojとYahooJapanを指定するだけです

追記 19.06.18


上記のやり方ではどうやらエラーが出るようになりました。

取得方法がどうやら変わったのでしょうか?
下記のやり方でとれるようです

CPLUS_INCLUDE_PATH

Cabochaをローカルにインストールさいのメモ

共用環境だと何かライブラリをインストールする際にも自分のローカルにインストールする必要があります。その際にハマったのでメモ

mecab

cabochaはMecabを使用しますので予めインストールしておきます。

CRF++

まず、ライブラリをインストールします。こちらから最新版をダウンロードします。現在はCRF++-0.58が最新版なのでこちらをダウンロードします。その後インストールします

環境変数

環境変数を設定しておきます。これを設定しておかないとcabochaのコンパイル時に下記エラーが出ます。

環境変数

cabocha

次にcabochaをインストールします。こちらから同様に最新版をダウンロードします。現在では0.69です。

環境変数は.bashrcなどに入れておくと面倒がなくていいです