From fda1c8cf07c5130aff53775454a5f2cfc8f5d2e0 Mon Sep 17 00:00:00 2001 From: Determinant Date: Mon, 29 Feb 2016 14:38:33 +0800 Subject: save workspace --- kaldi_decode/cmd.sh | 3 +- kaldi_decode/decode.sh | 124 --------------------------------------- kaldi_decode/path.sh | 12 +++- kaldi_decode/src/Makefile | 6 +- kaldi_decode/src/nerv4decode.lua | 27 +++++---- kaldi_io/Makefile | 6 +- kaldi_io/tools/kaldi_to_nerv.cpp | 32 +++++----- 7 files changed, 52 insertions(+), 158 deletions(-) delete mode 100755 kaldi_decode/decode.sh diff --git a/kaldi_decode/cmd.sh b/kaldi_decode/cmd.sh index e2e54e8..be10905 100755 --- a/kaldi_decode/cmd.sh +++ b/kaldi_decode/cmd.sh @@ -25,7 +25,8 @@ #c) run it locally... export train_cmd=run.pl -export decode_cmd=run.pl +#export decode_cmd=run.pl +export decode_cmd='queue.pl -l hostname="markov"' export cuda_cmd=run.pl export mkgraph_cmd=run.pl diff --git a/kaldi_decode/decode.sh b/kaldi_decode/decode.sh deleted file mode 100755 index aa7e089..0000000 --- a/kaldi_decode/decode.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/bash - -# Copyright 2012-2013 Karel Vesely, Daniel Povey -# Apache 2.0 - -# Begin configuration section. -nnet= # non-default location of DNN (optional) -feature_transform= # non-default location of feature_transform (optional) -model= # non-default location of transition model (optional) -class_frame_counts= # non-default location of PDF counts (optional) -srcdir= # non-default location of DNN-dir (decouples model dir from decode dir) - -stage=0 # stage=1 skips lattice generation -nj=4 -cmd=run.pl - -acwt=0.10 # note: only really affects pruning (scoring is on lattices). -beam=13.0 -lattice_beam=8.0 -min_active=200 -max_active=7000 # limit of active tokens -max_mem=50000000 # approx. limit to memory consumption during minimization in bytes -nnet_forward_opts="--prior-scale=1.0" - -skip_scoring=false -scoring_opts="--min-lmwt 4 --max-lmwt 15" - -num_threads=1 # if >1, will use latgen-faster-parallel -parallel_opts= # Ignored now. -use_gpu="no" # yes|no|optionaly -# End configuration section. - -echo "$0 $@" # Print the command line for logging - -[ -f ./path.sh ] && . ./path.sh; # source the path. -. parse_options.sh || exit 1; - -if [ $# != 4 ]; then - echo "Usage: $0 [options] " - echo "... where is assumed to be a sub-directory of the directory" - echo " where the DNN and transition model is." - echo "e.g.: $0 exp/dnn1/graph_tgpr data/test config.lua exp/dnn1/decode_tgpr" - echo "" - echo "This script works on plain or modified features (CMN,delta+delta-delta)," - echo "which are then sent through feature-transform. It works out what type" - echo "of features you used from content of srcdir." - echo "" - echo "main options (for others, see top of script file)" - echo " --config # config containing options" - echo " --nj # number of parallel jobs" - echo " --cmd (utils/run.pl|utils/queue.pl ) # how to run jobs." - echo "" - echo " --srcdir # non-default dir with DNN/models, can be different" - echo " # from parent dir of ' (opt.)" - echo "" - echo " --acwt # select acoustic scale for decoding" - echo " --scoring-opts # options forwarded to local/score.sh" - echo " --num-threads # N>1: run multi-threaded decoder" - exit 1; -fi - - -graphdir=$1 -data=$2 -config=$3 -dir=$4 -[ -z $srcdir ] && srcdir=`dirname $dir`; # Default model directory one level up from decoding directory. -sdata=$data/split$nj; - -mkdir -p $dir/log - -[[ -d $sdata && $data/feats.scp -ot $sdata ]] || split_data.sh $data $nj || exit 1; -echo $nj > $dir/num_jobs - -# Select default locations to model files (if not already set externally) -[ -z "$model" ] && model=$srcdir/final.mdl -# -[ -z "$class_frame_counts" -a -f $srcdir/prior_counts ] && class_frame_counts=$srcdir/prior_counts # priority, -[ -z "$class_frame_counts" ] && class_frame_counts=$srcdir/ali_train_pdf.counts - -# Check that files exist -for f in $sdata/1/feats.scp $model $class_frame_counts $graphdir/HCLG.fst; do - [ ! -f $f ] && echo "$0: missing file $f" && exit 1; -done - -# Possibly use multi-threaded decoder -thread_string= -[ $num_threads -gt 1 ] && thread_string="-parallel --num-threads=$num_threads" - - -# PREPARE FEATURE EXTRACTION PIPELINE -# import config, -cmvn_opts= -delta_opts= -D=$srcdir -[ -e $D/norm_vars ] && cmvn_opts="--norm-means=true --norm-vars=$(cat $D/norm_vars)" # Bwd-compatibility, -[ -e $D/cmvn_opts ] && cmvn_opts=$(cat $D/cmvn_opts) -[ -e $D/delta_order ] && delta_opts="--delta-order=$(cat $D/delta_order)" # Bwd-compatibility, -[ -e $D/delta_opts ] && delta_opts=$(cat $D/delta_opts) -# -# Create the feature stream, -feats="ark,s,cs:copy-feats scp:$sdata/JOB/feats.scp ark:- |" -# apply-cmvn (optional), -[ ! -z "$cmvn_opts" -a ! -f $sdata/1/cmvn.scp ] && echo "$0: Missing $sdata/1/cmvn.scp" && exit 1 -[ ! -z "$cmvn_opts" ] && feats="$feats apply-cmvn $cmvn_opts --utt2spk=ark:$sdata/JOB/utt2spk scp:$sdata/JOB/cmvn.scp ark:- ark:- |" -# add-deltas (optional), -[ ! -z "$delta_opts" ] && feats="$feats add-deltas $delta_opts ark:- ark:- |" -# -# Run the decoding in the queue, -if [ $stage -le 0 ]; then - $cmd --num-threads $((num_threads+1)) JOB=1:$nj $dir/log/decode.JOB.log \ - ./src/nnet-forward $nnet_forward_opts --class-frame-counts=$class_frame_counts --use-gpu=$use_gpu $config "$feats" ark:- \| \ - latgen-faster-mapped$thread_string --min-active=$min_active --max-active=$max_active --max-mem=$max_mem --beam=$beam \ - --lattice-beam=$lattice_beam --acoustic-scale=$acwt --allow-partial=true --word-symbol-table=$graphdir/words.txt \ - $model $graphdir/HCLG.fst ark:- "ark:|gzip -c > $dir/lat.JOB.gz" || exit 1; -fi -# Run the scoring -if ! $skip_scoring ; then - [ ! -x local/score.sh ] && \ - echo "Not scoring because local/score.sh does not exist or not executable." && exit 1; - local/score.sh $scoring_opts --cmd "$cmd" $data $graphdir $dir || exit 1; -fi - -exit 0; diff --git a/kaldi_decode/path.sh b/kaldi_decode/path.sh index 5aebc72..5e9bd2a 100755 --- a/kaldi_decode/path.sh +++ b/kaldi_decode/path.sh @@ -1,5 +1,11 @@ -export KALDI_ROOT=/slfs6/users/ymz09/kaldi/ -export PATH=$PWD/utils/:$KALDI_ROOT/src/bin:$KALDI_ROOT/tools/openfst/bin:$KALDI_ROOT/src/fstbin/:$KALDI_ROOT/src/gmmbin/:$KALDI_ROOT/src/featbin/:$KALDI_ROOT/src/lm/:$KALDI_ROOT/src/sgmmbin/:$KALDI_ROOT/src/sgmm2bin/:$KALDI_ROOT/src/fgmmbin/:$KALDI_ROOT/src/latbin/:$KALDI_ROOT/src/nnetbin:$KALDI_ROOT/src/nnet2bin/:$KALDI_ROOT/src/kwsbin:$PWD:$PATH +### change this line to your kaldi repo +export KALDI_ROOT=/speechlab/tools/KALDI/kaldi-master/ +### the following lines should not be changed in most cases + +# setup kaldi path +[ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ROOT/tools/env.sh +export PATH=$PWD/utils/:$KALDI_ROOT/src/bin:$KALDI_ROOT/tools/openfst/bin:$KALDI_ROOT/tools/irstlm/bin/:$KALDI_ROOT/src/fstbin/:$KALDI_ROOT/src/gmmbin/:$KALDI_ROOT/src/featbin/:$KALDI_ROOT/src/lm/:$KALDI_ROOT/src/sgmmbin/:$KALDI_ROOT/src/sgmm2bin/:$KALDI_ROOT/src/fgmmbin/:$KALDI_ROOT/src/latbin/:$KALDI_ROOT/src/nnetbin:$KALDI_ROOT/src/nnet2bin/:$KALDI_ROOT/src/kwsbin:$PWD:$PATH export LC_ALL=C -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/slhome/ymz09/mylibs/:. +# setup luarocks path and cpath for NERV (important) +source <(../../install/bin/luarocks path) diff --git a/kaldi_decode/src/Makefile b/kaldi_decode/src/Makefile index 118420c..0897798 100644 --- a/kaldi_decode/src/Makefile +++ b/kaldi_decode/src/Makefile @@ -1,11 +1,11 @@ # Change KDIR to `kaldi-trunk' path (Kaldi must be compiled with --share) -KDIR := /slfs6/users/ymz09/kaldi/ -NERVDIR := /slfs6/users/ymz09/nerv-project/nerv/ +KDIR := /speechlab/tools/KALDI/kaldi-master/ +NERVDIR := /speechlab/users/mfy43/nerv/ CUDADIR := /usr/local/cuda/ nnet-forward: g++ -msse -msse2 -Wall -I $(KDIR)/src/ -pthread -DKALDI_DOUBLEPRECISION=0 -DHAVE_POSIX_MEMALIGN -Wno-sign-compare -Wno-unused-local-typedefs -Winit-self -DHAVE_EXECINFO_H=1 -rdynamic -DHAVE_CXXABI_H -DHAVE_ATLAS -I $(KDIR)/tools/ATLAS/include -I $(KDIR)/tools/openfst/include -Wno-sign-compare -g -fPIC -DHAVE_CUDA -I $(CUDADIR)/include -DKALDI_NO_EXPF -I $(NERVDIR)/install//include/luajit-2.0/ -I $(NERVDIR)/install/include/ -DLUA_USE_APICHECK -c -o nnet-forward.o nnet-forward.cc - g++ -rdynamic -Wl,-rpath=$(KDIR)/tools/openfst/lib -L$(CUDADIR)/lib64 -Wl,-rpath,$(CUDADIR)/lib64 -Wl,-rpath=$(KDIR)/src/lib -L. -L$(KDIR)/src/nnet/ -L$(KDIR)/src/cudamatrix/ -L$(KDIR)/src/lat/ -L$(KDIR)/src/hmm/ -L$(KDIR)/src/tree/ -L$(KDIR)/src/matrix/ -L$(KDIR)/src/util/ -L$(KDIR)/src/base/ nnet-forward.o $(KDIR)/src/nnet//libkaldi-nnet.so $(KDIR)/src/cudamatrix//libkaldi-cudamatrix.so $(KDIR)/src/lat//libkaldi-lat.so $(KDIR)/src/hmm//libkaldi-hmm.so $(KDIR)/src/tree//libkaldi-tree.so $(KDIR)/src/matrix//libkaldi-matrix.so $(KDIR)/src/util//libkaldi-util.so $(KDIR)/src/base//libkaldi-base.so -L$(KDIR)/tools/openfst/lib -lfst /usr/lib/liblapack.so /usr/lib/libcblas.so /usr/lib/libatlas.so /usr/lib/libf77blas.so -lm -lpthread -ldl -lcublas -lcudart -lkaldi-nnet -lkaldi-cudamatrix -lkaldi-lat -lkaldi-hmm -lkaldi-tree -lkaldi-matrix -lkaldi-util -lkaldi-base -lstdc++ -L$(NERVDIR)/install/lib -lnervcore -lluaT -rdynamic -Wl,-rpath=$(KDIR)//tools/openfst/lib -L$(DUDADIR)/lib64 -Wl,-rpath,$(CUDADIR)/lib64 -Wl,-rpath=$(KDIR)//src/lib -lfst -lm -lpthread -ldl -lcublas -lcudart -L $(NERVDIR)/luajit-2.0/src/ -lluajit -o nnet-forward + g++ -rdynamic -Wl,-rpath=$(KDIR)/tools/openfst/lib -L$(CUDADIR)/lib64 -Wl,-rpath,$(CUDADIR)/lib64 -Wl,-rpath=$(KDIR)/src/lib -L. -L$(KDIR)/src/nnet/ -L$(KDIR)/src/cudamatrix/ -L$(KDIR)/src/lat/ -L$(KDIR)/src/hmm/ -L$(KDIR)/src/tree/ -L$(KDIR)/src/matrix/ -L$(KDIR)/src/util/ -L$(KDIR)/src/base/ nnet-forward.o $(KDIR)/src/nnet//libkaldi-nnet.so $(KDIR)/src/cudamatrix//libkaldi-cudamatrix.so $(KDIR)/src/lat//libkaldi-lat.so $(KDIR)/src/hmm//libkaldi-hmm.so $(KDIR)/src/tree//libkaldi-tree.so $(KDIR)/src/matrix//libkaldi-matrix.so $(KDIR)/src/util//libkaldi-util.so $(KDIR)/src/base//libkaldi-base.so -L$(KDIR)/tools/openfst/lib -lfst -lm -lpthread -ldl -lkaldi-nnet -lkaldi-cudamatrix -lkaldi-lat -lkaldi-hmm -lkaldi-tree -lkaldi-matrix -lkaldi-util -lkaldi-base -lstdc++ -L$(NERVDIR)/install/lib -Wl,-rpath=$(NERVDIR)/install/lib -lnervcore -lluaT -rdynamic -Wl,-rpath=$(KDIR)//tools/openfst/lib -L$(DUDADIR)/lib64 -Wl,-rpath,$(CUDADIR)/lib64 -Wl,-rpath=$(KDIR)//src/lib -lfst -lm -lpthread -ldl -L $(NERVDIR)/luajit-2.0/src/ -lluajit -o nnet-forward -L/home/intel/mkl/lib/intel64/ -Wl,-rpath=/home/intel/mkl/lib/intel64/ -lmkl_rt clean: -rm nnet-forward.o nnet-forward diff --git a/kaldi_decode/src/nerv4decode.lua b/kaldi_decode/src/nerv4decode.lua index b2ff344..898b5a8 100644 --- a/kaldi_decode/src/nerv4decode.lua +++ b/kaldi_decode/src/nerv4decode.lua @@ -1,7 +1,19 @@ -package.path="/home/slhome/ymz09/.luarocks/share/lua/5.1/?.lua;/home/slhome/ymz09/.luarocks/share/lua/5.1/?/init.lua;/slfs6/users/ymz09/nerv-project/nerv/install/share/lua/5.1/?.lua;/slfs6/users/ymz09/nerv-project/nerv/install/share/lua/5.1/?/init.lua;"..package.path; -package.cpath="/home/slhome/ymz09/.luarocks/lib/lua/5.1/?.so;/slfs6/users/ymz09/nerv-project/nerv/install/lib/lua/5.1/?.so;"..package.cpath; +print = function(...) io.write(table.concat({...}, "\t")) end +io.output('/dev/null') +-- path and cpath are correctly set by `path.sh` local k,l,_=pcall(require,"luarocks.loader") _=k and l.add_context("nerv","scm-1") require 'nerv' +nerv.printf("*** NERV: A Lua-based toolkit for high-performance deep learning (alpha) ***\n") +nerv.info("automatically initialize a default MContext...") +nerv.MMatrix._default_context = nerv.MContext() +nerv.info("the default MContext is ok") +-- only for backward compatibilty, will be removed in the future +local function _add_profile_method(cls) + local c = cls._default_context + cls.print_profile = function () c:print_profile() end + cls.clear_profile = function () c:clear_profile() end +end +_add_profile_method(nerv.MMatrix) function build_trainer(ifname, feature) local param_repo = nerv.ParamRepo() @@ -34,9 +46,7 @@ function build_trainer(ifname, feature) end local transformed if e.global_transf then - local batch = gconf.cumat_type(data[id]:nrow(), data[id]:ncol()) - batch:copy_fromh(data[id]) - transformed = nerv.speech_utils.global_transf(batch, + transformed = nerv.speech_utils.global_transf(data[id], global_transf, gconf.frm_ext or 0, 0, gconf) @@ -45,7 +55,7 @@ function build_trainer(ifname, feature) end table.insert(input, transformed) end - local output = {nerv.CuMatrixFloat(input[1]:nrow(), network.dim_out[1])} + local output = {nerv.MMatrixFloat(input[1]:nrow(), network.dim_out[1])} network:batch_resize(input[1]:nrow()) network:propagate(input, output) @@ -65,12 +75,9 @@ function build_trainer(ifname, feature) end function init(config, feature) - local tmp = io.write - io.write = function(...) - end dofile(config) + gconf.use_cpu = true -- use CPU to decode trainer = build_trainer(gconf.decode_param, feature) - io.write = tmp end function feed() diff --git a/kaldi_io/Makefile b/kaldi_io/Makefile index db310d2..6d350a4 100644 --- a/kaldi_io/Makefile +++ b/kaldi_io/Makefile @@ -1,5 +1,5 @@ # Change KDIR to `kaldi-trunk' path (Kaldi must be compiled with --share) -KDIR := /slfs1/users/tt123/asr/kaldi-trunk/ +KDIR := /speechlab/tools/KALDI/kaldi-master/ SHELL := /bin/bash BUILD_DIR := $(CURDIR)/build @@ -26,8 +26,8 @@ build: $(OBJ_DIR) $(OBJ_SUBDIR) $(OBJS) $(OBJ_DIR)/src/test install: $(LUA_DIR) $(LUA_SUBDIR) $(LUA_LIBS) $(LIBS) include $(KDIR)/src/kaldi.mk -KL := $(KDIR)/src/feat/kaldi-feat.a $(KDIR)/src/matrix/kaldi-matrix.a $(KDIR)/src/base/kaldi-base.a $(KDIR)/src/util/kaldi-util.a $(KDIR)/src/hmm/kaldi-hmm.a $(KDIR)/src/tree/kaldi-tree.a -lcblas -llapack_atlas - +#KL := $(KDIR)/src/feat/kaldi-feat.a $(KDIR)/src/matrix/kaldi-matrix.a $(KDIR)/src/base/kaldi-base.a $(KDIR)/src/util/kaldi-util.a $(KDIR)/src/hmm/kaldi-hmm.a $(KDIR)/src/tree/kaldi-tree.a -lcblas -llapack_atlas +KL := $(KDIR)/src/feat/kaldi-feat.a $(KDIR)/src/matrix/kaldi-matrix.a $(KDIR)/src/base/kaldi-base.a $(KDIR)/src/util/kaldi-util.a $(KDIR)/src/hmm/kaldi-hmm.a $(KDIR)/src/tree/kaldi-tree.a $(BLAS_LDFLAGS) $(OBJ_DIR) $(LUA_DIR) $(OBJ_SUBDIR) $(LUA_SUBDIR): -mkdir -p $@ $(LUA_DIR)/%.lua: %.lua diff --git a/kaldi_io/tools/kaldi_to_nerv.cpp b/kaldi_io/tools/kaldi_to_nerv.cpp index 1edb0f2..0282b7c 100644 --- a/kaldi_io/tools/kaldi_to_nerv.cpp +++ b/kaldi_io/tools/kaldi_to_nerv.cpp @@ -8,26 +8,30 @@ char token[1024]; char output[1024]; double mat[4096][4096]; int main(int argc, char **argv) { + FILE *fin; std::ofstream fout; - fout.open(argv[1]); + assert(argc == 3); + fin = fopen(argv[1], "r"); + fout.open(argv[2]); + assert(fin != NULL); int cnt = 0; bool shift; - while (scanf("%s", token) != EOF) + while (fscanf(fin, "%s", token) != EOF) { int nrow, ncol; int i, j; if (strcmp(token, "") == 0) { double lrate, blrate, mnorm; - scanf("%d %d", &ncol, &nrow); - scanf("%s %lf %s %lf %s %lf", + fscanf(fin, "%d %d", &ncol, &nrow); + fscanf(fin, "%s %lf %s %lf %s %lf", token, &lrate, token, &blrate, token, &mnorm); - scanf("%s", token); + fscanf(fin, "%s", token); assert(*token == '['); printf("%d %d\n", nrow, ncol); for (j = 0; j < ncol; j++) for (i = 0; i < nrow; i++) - scanf("%lf", mat[i] + j); + fscanf(fin, "%lf", mat[i] + j); long base = fout.tellp(); sprintf(output, "%16d", 0); fout << output; @@ -47,13 +51,13 @@ int main(int argc, char **argv) { sprintf(output, "[%13lu]\n", length); fout << output; fout.seekp(0, std::ios_base::end); - scanf("%s", token); + fscanf(fin, "%s", token); assert(*token == ']'); - if (scanf("%s", token) == 1 && *token == '[') + if (fscanf(fin, "%s", token) == 1 && *token == '[') { base = fout.tellp(); for (j = 0; j < ncol; j++) - scanf("%lf", mat[0] + j); + fscanf(fin, "%lf", mat[0] + j); sprintf(output, "%16d", 0); fout << output; sprintf(output, "{type=\"nerv.BiasParam\",id=\"affine%d_bp\"}\n", @@ -76,14 +80,14 @@ int main(int argc, char **argv) { strcmp(token, "") == 0) { double lrate, blrate, mnorm; - scanf("%d %d", &ncol, &ncol); - scanf("%s %lf", + fscanf(fin, "%d %d", &ncol, &ncol); + fscanf(fin, "%s %lf", token, &lrate); - scanf("%s", token); + fscanf(fin, "%s", token); assert(*token == '['); printf("%d\n", ncol); for (j = 0; j < ncol; j++) - scanf("%lf", mat[0] + j); + fscanf(fin, "%lf", mat[0] + j); long base = fout.tellp(); sprintf(output, "%16d", 0); fout << output; @@ -101,7 +105,7 @@ int main(int argc, char **argv) { sprintf(output, "[%13lu]\n", length); fout << output; fout.seekp(0, std::ios_base::end); - scanf("%s", token); + fscanf(fin, "%s", token); assert(*token == ']'); } } -- cgit v1.2.3-70-g09d2