== Authors of the Linux Building README == Kaisheng Yao Microsoft Research email: kaisheny@microsoft.com Wengong Jin, Shanghai Jiao Tong University email: acmgokun@gmail.com Yu Zhang, Leo Liu, Scott Cyphers CSAIL, Massachusetts Institute of Technology email: yzhang87@csail.mit.edu email: leoliu_cu@sbcglobal.net email: cyphers@mit.edu Guoguo Chen CLSP, Johns Hopkins University email: guoguo@jhu.edu == Preeliminaries == To build the cpu version, you have to install intel MKL blas library or ACML library first. Note that ACML is free, whereas MKL may not be. for MKL: 1. Download from https://software.intel.com/en-us/intel-mkl for ACML: 1. Download from http://developer.amd.com/tools-and-sdks/archive/amd-core-math-library-acml/acml-downloads-resources/ We have seen some problems with some versions of the library on Intel processors, but have had success with acml-5-3-1-ifort-64bit.tgz for Kaldi: 1. In kaldi-trunk/tools/Makefile, uncomment # OPENFST_VERSION = 1.4.1, and re-install OpenFst using the makefile. 2. In kaldi-trunk/src/, do ./configure --shared; make depend -j 8; make -j 8; and re-compile Kaldi (the -j option is for parallelization). To build the gpu version, you have to install NIVIDIA CUDA first == Build Preparation == You can do an out of source build in any directory, as well as an in source build. Let $CNTK be the CNTK directory. For an out of source build in the directory "build" type >mkdir build >cd build >$CNTK/configure -h (For an in source build, just run configure in the $CNTK directory). You will see various options for configure, as well as their default values. CNTK needs a CPU math directory, either acml or mkl. If you do not specify one and both are available, acml will be used. For GPU use, a cuda and gdk directory are also required. Similary, to build the kaldi plugin a kaldi directory is required. You may also specify whether you want a debug or release build, as well as add additional path roots to use in searching for libraries. Rerun configure with the desired options: >$CNTK/configure ... This will create a Config.make and a Makefile (if you are doing an in source build, a Makefile will not be created). The Config.make file records the configuration parameters and the Makefile reinvokes the $CNTK/Makefile, passing it the build directory where it can find the Config.make. After make completes, you will have the following directories: .build will contain object files, and can be deleted bin contains the cntk program lib contains libraries and plugins The bin and lib directories can safely be moved as long as they remain siblings. To clean >make clean == Run == All executables are in bin directory: cntk: The main executable for CNTK *.so: shared library for corresponding reader, these readers will be linked and loaded dynamically at runtime. ./cntk configFile=${your cntk config file} == Kaldi Reader == This is a HTKMLF reader and kaldi writer (for decode) To build, set --with-kaldi when you configure. The feature section is like: writer=[ writerType=KaldiReader readMethod=blockRandomize frameMode=false miniBatchMode=Partial randomize=Auto verbosity=1 ScaledLogLikelihood=[ dim=$labelDim$ Kaldicmd="ark:-" # will pipe to the Kaldi decoder latgen-faster-mapped scpFile=$outputSCP$ # the file key of the features ] ] == Kaldi2 Reader == This is a kaldi reader and kaldi writer (for decode) To build, set --with-kaldi in your Config.make The features section is different: features=[ dim= rx= scpFile= featureTransform= ] rx is a text file which contains: one Kaldi feature rxspecifier readable by RandomAccessBaseFloatMatrixReader. 'ark:' specifiers don't work; only 'scp:' specifiers work. scpFile is a text file generated by running: feat-to-len FEATURE_RXSPECIFIER_FROM_ABOVE ark,t:- > TEXT_FILE_NAME scpFile should contain one line per utterance. If you want to run with fewer utterances, just shorten this file. (It will load the feature rxspecifier but ignore utterances not present in scpFile). featureTransform is the name of a Kaldi feature transform file: Kaldi feature transform files are used for stacking / applying transforms to features. An empty string (if permitted by the config file reader?) or the special string: NO_FEATURE_TRANSFORM says to ignore this option. ********** Labels ********** The labels section is also different. labels=[ mlfFile= labelDim= labelMappingFile= ] Only difference is mlfFile. mlfFile is a different format now. It is a text file which contains: one Kaldi label rxspecifier readable by Kaldi's copy-post binary.