Kaldiプレイブック(ansible)


AnsibleによるKaldiの環境設定

研究室に新人が来たときや新入社員が入ったとき、PCを買い替えたときなどに一から環境設定するのは面倒です。
そこで環境設定が楽にできることで有名なansibleを用いてKaldiの環境設定をVirtul Box上のCentOSに設定してみました。

Kaldiは音声認識でよく使われるツールです。

環境設定順序

1:Virtual Boxのダウンロード
2:Vagrantの設定(CentOS)
3:Ansbleの設定

1は解説が多いので下記などを参考にしてもらったら良いです。

Vagrantの設定

1:Vagrantをインストール

下記を参考にして下さい。
http://osdn.jp/magazine/15/02/13/200000

2:Vagrantの設定ファイル

下記のようなVagrantfileを作成します。
vagrant initで初期のVagrantfileを作成可能です。

エラーが出た場合の一つの解決方法


# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
        config.vm.define "ホスト名指定" do |node|
              node.vm.box = "chef/centos-6.6"
              node.vm.hostname = "ホスト名指定"
              node.vm.network :private_network, ip: "ipアドレス指定"
        end
end

ホスト名とipアドレスを指定して仮想のOSを立てます。

下記のコマンドを入力するとVagrantが立ち上がり設定が行なわれます。

vagrant up

もし404エラーが出た場合
欲しいcentosのボックスをadd で導入します。

vagrant box add centos http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.6-x86_64-v20150426.box

導入されたosの名前を確認します。

vagrant box list

下記に示されるところに導入したボックス名を記入します。

node.vm.box = "chef/centos-6.6"

再度、立ち上げを行います。

vagrant up

sshでansibleに接続するには下記ので設定が必要なので予め設定(登録されたipアドレスがvagrantファイルと同一かチェックする必要あり)

 vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config

Ansibleの設定

Ansibleで設定するホストを指定するため下記のファイルを作成

ansible_hosts

[先ほど指定したhost名]
先ほど指定したipアドレス ansible_ssh_private_key_file=Vagrantで作成されるプライベートキー ansible_ssh_user=vagrant

プライベートキーは下記のいずれかの直下にプライベートキーが作成される。

1:~/.vagrant.d/
2:Vagrantを設定したフォルダ/.vagrant/machines/作成したホスト名/virtualbox/

どちらかのプライベートキーを使用する。

過去にvagrantを使用してhostを作成したこごtが場合はipアドレスを変更しないとアクセス出来ないので注意が必要です。

ここからkaldiの設定を行なうansibleのymlを作成

kaldi.yml

---
- hosts: 設定したホスト名

  user: vagrant
  sudo: yes

  tasks:
    - name: Upgrate Package
      yum: name=* state=latest
      sudo: yes
      tags: update
    - name: Install Package
      yum: name={{ item }} state=present
      sudo: yes
      when: ansible_os_family == 'RedHat'
      with_items:
              - atlas-sse3-devel
              - atlas-devel
              - nkf
              - git
              - gcc-c++
              - zlib-devel
              - automake
              - libtool
              - autoconf
              - patch
              - subversion
              - lynx
              - graphviz
              - bc
              - vim
      tags: Install
    - name: Download Kaldi
      git: repo=https://github.com/kaldi-asr/kaldi.git dest=/home/vagrant/kaldi accept_hostkey=yes
      sudo: yes
      tags: kaldi
    - name: Install Kaldi
      command: make j 4 chdir=/home/vagrant/kaldi/tools
      sudo: yes
      tags: kaldiInstall
    - name: Install Kaldi2
      command: ./configure  chdir=/home/vagrant/kaldi/src
      sudo: yes
      tags: kaldiInstall2
    - name: Install Kaldi3
      command: make -j 4 depend chdir=/home/vagrant/kaldi/src
      sudo: yes
      tags: kaldiInstall3
    - name: Install Kaldi4
      command: make -j 4 chdir=/home/vagrant/kaldi/src
      sudo: yes
      tags: kaldiInstall4 

RNN部分でエラーが出るので切り分けました。原因が分かったら更新します。

    - name: Install RNN
      command: ./install.sh  chdir=/home/vagrant/kaldi/tools
      sudo: yes
      tags: InstallRNN
    - name: Install RNN2
      command: ./install_atlas.sh  chdir=/home/vagrant/kaldi/tools
      sudo: yes
      tags: InstallRNN2

言語モデルのツールでsrilmを使用する場合は別途申請が必要だが、RNNの場合は申請しなくても良い。

SRILMダウンロードページ
http://www.speech.sri.com/projects/srilm/download.html

下記のコマンドを実行するとansibleが環境を作成してくれる!!

ansible-playbook -i ansible_hosts kaldi.yml

他にも機械学習、音声認識、自然言語処理で環境が面倒だと思う方はansibleの導入を検討してみてはいかがでしょうか?

PS:

仮想環境にアクセスしたいとき

ssh IPアドレス -i プライベートキー

もしくは

vagrant ssh host

ファイルを送りたいとき

scp -F ~/.ssh/config ファイル名 vagrant@host:~/

もしくは

sudo sftp -F ~/.ssh/config -i .vagrant/machines/host/virtualbox/private_key 192.168.22.10

ansible トラブル解決参考サイト