AWSのlambdaでJavaを使う

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

Test.java


package com.example;

import java.util.Iterator;
import java.util.Map;

import com.amazonaws.services.lambda.runtime.Context;

public class Test {
	
	//http://stackoverflow.com/questions/35545642/error-executing-hello-world-for-aws-lambda-in-java
    public String handler(Map input, Context context){
    	String ret="";
    	Iterator ite=input.keySet().iterator();
    	while(ite.hasNext()){
    		String key=ite.next();
    		String val=input.get(key).toString();
    		ret+="("+key+","+val+"),";
    	}
    	return ret;
    }
}

pom.xml



  4.0.0

  com.example
  test
  0.0.1-SNAPSHOT
  jar

  Test
  http://example.com

  
    UTF-8
  

  
    
      junit
      junit
      3.8.1
      test
    
    
    
	    com.amazonaws
	    aws-lambda-java-core
	    1.0.0
	
  
  
  
    
    
      
        org.apache.maven.plugins
        maven-shade-plugin
        2.3
        
          false
        
        
          
            package
            
              shade
            
          
        
      
    
  


コンパイル

mvn package

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インストール

brew install lua

これだけです

torchインストール

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

git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch; bash install-deps;
./install.sh

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


print '==> downloading dataset'

-- Here we download dataset files. 

-- Note: files were converted from their original LUSH format
-- to Torch's internal format.

-- The SVHN dataset contains 3 files:
--    + train: training data
--    + test:  test data

tar = 'http://torch7.s3-website-us-east-1.amazonaws.com/data/mnist.t7.tgz'

if not paths.dirp('mnist.t7') then
   os.execute('wget ' .. tar)
   os.execute('tar xvf ' .. paths.basename(tar))
end

train_file = 'src/mnist.t7/train_32x32.t7'
test_file = 'src/mnist.t7/test_32x32.t7'

----------------------------------------------------------------------
print '==> loading dataset'

-- We load the dataset from disk, it's straightforward

trainData = torch.load(train_file,'ascii')
testData = torch.load(test_file,'ascii')

print('Training Data:')
print(trainData)
print()

print('Test Data:')
print(testData)
print()

----------------------------------------------------------------------
print '==> visualizing data'

-- Visualization is quite easy, using itorch.image().
if itorch then
   print('training data:')
   itorch.image(trainData.data[{ {1,256} }])
   print('test data:')
   itorch.image(testData.data[{ {1,256} }])
end

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

Tensorflowのエラー

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

    cell = tf.nn.rnn_cell.BasicLSTMCell(size, forget_bias=0.0)
AttributeError: 'module' object has no attribute 'rnn_cell'

こんなエラーとか。

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

これを

tf.nn.rnn_cell.BasicLSTMCell

これに変更

tf.contrib.rnn.BasicLSTMCell