-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[src] Lots of changes: first stab at kaldi10 (non-compatible version of kaldi) #3083
base: master
Are you sure you want to change the base?
Conversation
I'd also normalize audio to [-1.0, 1.0]. The HTK-inherited 65536.0 multiplier is rather baffling to DSP folk. |
Yeah, I already did that (check the diff), forgot to mention it.
…On Sun, Mar 10, 2019 at 11:00 PM kkm (aka Kirill Katsnelson) < ***@***.***> wrote:
I'd also normalize audio to [-1.0, 1.0]. The HTK-inherited 65536.0
multiplier is rather baffling to DSP folk.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ADJVu4eaZ44VUvJwuZjYRMHiLnuuP9_2ks5vVcbKgaJpZM4bnByH>
.
|
And maybe it's time to use more of c++11? Such things as the Also, it's certainly time to get rid of system-dependent threads, mutexes, timers and rand(). c++ memory model is certainly sufficient not only for multithreading, but also for advanced HPC stuff, such as handling lock-free multi-core access to data. To give you a baseline, when I started our new prod server (based on Kaldi decoding pathway), I used only standard c++11 features, and compiled it in Windows and Linux (with separate small system-dependent directories, for stuff like logging and daemonizing). This was back at the time when I had only VS 2013, and its support for c++11 was quite buggy; I removed all workaround since then. So it really works, and entirely readable. And if I had a say, I'd definitely got rid of the explicit sesquipedalian iterator type names in favor of |
Do you mind if I create a GitHub "project" for this development? I never played with them, but they are supposedly helpful in separating the normal Kaldi activity from the entirely new development. Try and see? I tried labeling the issues, but that does not make them amazingly visible at a glance. |
We already switched over to c++11 for the internals of the mutex stuff, but
if you can figure out a more standard way to use it, instead of using our
wrappers like MultiThreaderr, that is just as clear, that would be good.
For changes timing and random numbers: if you can make a PR to fix those
issues, that would be great. Getting rid of the Kaldi-specific things and
jusing C++11 things would be fine, if it's natural. BTW, the reason we use
Log() and Exp() instead of log and exp is to work around a performance
issue with single-precision log (IIRC) on a particular version of clib..
I'm not sure how common that version still is.
Incidentally, the reason we sometimes use random number generators (e.g.
rand_r) is that if a lot of threads are calling rand(), e.g. dithering, it
causes a big performance problem from spinning on a lock, which happens
inside rand() I think. We're removing dithering though.
Sure, start a project for the development.
…On Sun, Mar 10, 2019 at 11:22 PM kkm (aka Kirill Katsnelson) < ***@***.***> wrote:
And maybe it's time to use more of c++11? Such things as the unique_ptr
is a super-win! The thing with it is one can adopt a convention as to who
owns the pointer: if you see a T * anywhere, it's an unowned pointer, and
a unique_ptr<T> (or share_ptr where it needs to be shared) represents an
owned pointer. This is what I always do in my code, and it really works,
and does not cause much headache. I know that it was always frustrating
when you try to e. g. add to a vector of pointers and get a "deleted
constructor" on a unique pointer class. This never happens in modern c++1x
(the emplace_*() methods and perfect forwarding take care of this) It's has
a very consistent stdc++ library, made consistent and with the language
user in mind. E.g. pre-final standard made a mess as to what constructors
are deleted if you declare an argumentful constructor on a class. Final
c+11 solved that in an very natural way. And you rarely if ever need to
mess with templates to generalize stuff over the standard library, as you
had with e. g. STL adapter classes; it just works, surprisingly. They went
a long way to make a single consistent thing of both the language and the
library so they work smoothly together. I may sound a bit gung-ho, but I am
totally a fan!
Also, it's certainly time to get rid of system-dependent threads, mutexes,
timers and rand(). c++ memory model is certainly sufficient not only for
multithreading, but also for advanced HPC stuff, such as handling lock-free
multi-core access to data.
To give you a baseline, when I started our new prod server (based on Kaldi
decoding pathway), I used only standard c++11 features, and compiled it in
Windows and Linux (with separate small system-dependent directories, for
stuff like logging and daemonizing). This was back at the time when I had
only VS 2013, and its support for c++11 was quite buggy; I removed all
workaround since then. So it really works, and entirely readable.
And if I had a say, I'd definitely got rid of the explicit sesquipedalian
iterator type names in favor of auto! IMHO, they rather subtract from
readability than add to it. I'll be happy to write a small tutorial for the
readers of the code (like grads and library adopters) that are unfamiliar
with the new features. But there are probably fewer fresh-backed grads
these days anyway who are familiar with C++ but not the 11.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ADJVuwgNoJ6VqOmKOx4P5mv0hpNYKmFyks5vVcwBgaJpZM4bnByH>
.
|
There is a global _RandMutex in Kaldi. I do not remember the file, somewhere in base/. Multitreaded code uses kaldi::RandomState instead, which would be much cleaner if it were a class with methods. c++11 has also different random distributions, but I would not touch that without running serious statistical A/B tests vs existing code. I'll get rid of most system-dependent stuff, it's no longer needed with modern C++.
Ah, you reminded me of another thing to fix... maybe. Or retire, I'm really unsure. While doing my various runs of Kaldi w/different compilers, I noticed that on a fast CPU the result of the exp/expf speed test comes out rather randomly, even with the same compier. The Moore's law hit us: the test makes too few iterations to be significant. The larger problem with it, though, is that the modern CPU's clock varies wildly depending on its load. The timing of 2 short identical loops differ: the first loop runs slower if ran on an idle CPU. A proper test would secure core affinity, then 100%-loaded it for at least 1ms or so, so the CPU notices and bump the clock up, and only then would run the actual comparison loops. And... is it still worth it? On a machine with the intel_pstate governor, idle machine:
Hot (last line of the same loop, 500 iterations w/o the sleep)
What fascinates me the most about the modern CPU is not so much it's pipelined architecture (that's been invented half a century ago), but rather it's clock and power management circuitry. |
edit: removed comment on bazel and moved it over to the resp. thread. |
Hello, well, this really is a big change. And it is not easy to accept that 'nnet1' should be removed given that I implemented it. But nevertheless, it was fun working on it back in 2011-2013, and it did a good job for a long period of time. On the other hand it is understandable that the backward compatibility over a long time brings many severe limitations. And in the long term, changes need to be made not to stay frozen in the past... I hope this was not too pesimistic, and yes, let the c++11 rule! (or maybe c++17?) |
Other possible issue is that python 2.7 is coming to its end of life. And many library |
I second the idea of switching to python3
y,
…On Mon, Mar 11, 2019 at 10:51 AM Karel Vesely ***@***.***> wrote:
Other possible issue is that python 2.7 is coming to its end of life. And
many library
developers already committed not to produce new versions for python 2.7
anymore,
including NumPy. So far we are good, but in the long term, it is quite
possible that
problems will come...
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AKisX42iKQqPs_C3i4vkGIiqFiRYb5g9ks5vVm1agaJpZM4bnByH>
.
|
In effect we have already switched to python3, meaning that we always write
new code in python3, and for old code, we make sure it works in python3
whenever we find something that does not work.
Regarding python vs. lua: I think python is the only game in town for
wrapping right now, based on demand.
Regarding things like standardizing use of c++11 everywhere, including
random number generation and mutextes: I am for this, but I will not drive
it myself because I am trying to figure out the trickier issues. If
someone like @kkm makes PRs to address those issues, I will merge them. It
doesn't have to be a big bang, we can use more standard C++11 for newer
code, and gradually standardize the older code. I will be using things
like shared_ptr when I reorganize the matrix/vector library.
Regarding cmake versus make: I am probably leaning towards cmake but I have
an open mind. It's a question of whether someone has the time to look at
revamping the build system. If someone is willing to drive the process of,
say, switching to cmake, I am all for it. Likewise with having an official
target for the library (and maybe even figuring out how to turn Kaldi into
one big library, in case someone wants to use it like that)-- that sounds
like a good idea, but right now I will not spend my own energy on it, I am
ready to approve a PR for it though. For Kaldi's own binaries, I think
it's nice to retain the ability to only link against subsets of things,
assuming it would be possible to keep that but also make a "fat" library.
…On Mon, Mar 11, 2019 at 10:57 AM jtrmal ***@***.***> wrote:
I second the idea of switching to python3
y,
On Mon, Mar 11, 2019 at 10:51 AM Karel Vesely ***@***.***>
wrote:
> Other possible issue is that python 2.7 is coming to its end of life. And
> many library
> developers already committed not to produce new versions for python 2.7
> anymore,
> including NumPy. So far we are good, but in the long term, it is quite
> possible that
> problems will come...
>
> —
> You are receiving this because you are subscribed to this thread.
> Reply to this email directly, view it on GitHub
> <#3083 (comment)>,
or mute
> the thread
> <
https://github.com/notifications/unsubscribe-auth/AKisX42iKQqPs_C3i4vkGIiqFiRYb5g9ks5vVm1agaJpZM4bnByH
>
> .
>
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ADJVuwe502xQzqVeNVVbcEvnS783HDSlks5vVm7TgaJpZM4bnByH>
.
|
If you are going to update the scripts too in kaldi10, I think it's a good idea to move all the shared scripts (e.g. |
Agreed, but I'll leave that till we're close to something final, as it will
lead to difficulty with merges.
…On Tue, Mar 12, 2019 at 6:57 PM Hossein Hadian ***@***.***> wrote:
If you are going to update the scripts too in kaldi10, I think it's a good
idea to move all the shared scripts (e.g. steps and utils) to /scripts.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ADJVu9pRdGunElBYJgGZmrkILnCX15bXks5vWDC-gaJpZM4bnByH>
.
|
Amen to that!
My own treatment of the And I'll be happy to tie the loose ends in the base/ library. There are some, in Windows-specific code, mainly.
Among many useful features, stdc++17 adds a very efficient and lightweight
The current location under wsj/ betrays the long legacy, but if only we could think of a natural way to keep the scripts under /egs/X/Y/{utils,steps}! I'm sure there is so much code, inside and out of Kaldi codebase, that depends on relative paths to these. |
I'm not by any means a "modern C++" expert, but I second Kirill's warning about shared_ptr. As I think it was already mentioned some time ago, shared_ptr has hidden cost not only because of reference counting but also, and perhaps more importantly, due to its safety guarantees when used in multithreaded code. To quote a part of an answer from this SO thread:
That's probably the reason why people talk about using alternatives for single threaded code. |
I had no idea about the std::shared_ptr performance problems! Thank you for
sharing, Vassil and Kirill!
I've been poking around in cmake, and it doesn't provide a built-in way to
link a bunch of static libraries together into one big library, as we do
with our Makefile-based system, which is annoying, but it does allow it to
be done in a non-platform-independent way.
…On Wed, Mar 13, 2019 at 2:00 AM Vassil Panayotov ***@***.***> wrote:
I will be using things like shared_ptr when I reorganize the matrix/vector library.
My own treatment of the shared_ptr is when I think need it, I always start
by looking for a way out to write code such that I don't. They have their
niche, but IMO it's one of those stdc++ classes which are the easiest to
misuse with the best intentions. Please be careful with it.
I'm not by any means a "modern C++" expert, but I second Kirill's warning
about shared_ptr. As I think it was already mentioned some time ago,
shared_ptr has hidden cost not only because of reference counting but also,
and perhaps more importantly, due to its safety guarantees when used in
multithreaded code. To quote a part of an answer from this SO thread
<https://stackoverflow.com/questions/22295665/how-much-is-the-overhead-of-smart-pointers-compared-to-normal-pointers-in-c>
:
If you want to learn more you can watch Nicolai M. Josuttis good talk
about "The Real Price of Shared Pointers in C++"
https://vimeo.com/131189627
It goes deep into the implementation details and CPU architecture for
write barriers, atomic locks etc. once listening you will never talk about
this feature being cheap. If you just want a proof of the magnitude slower,
skip the first 48 minutes and watch him running example code which runs up
to 180 times slower (compiled with -O3) when using shared pointer
everywhere.
That's probably the reason why people talk
<https://stackoverflow.com/questions/6593770/creating-a-non-thread-safe-shared-ptr>
about using alternatives for single threaded code.
Again, I'm hardly an authority on this, but I think it might be a good
idea to confine the shared_ptr use to the parts of the codebase where it's
really needed, and then only in the "outer loops" i.e. outside of code that
must be really fast.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEi_UE406AwnHYkTl3NkgtamPOcOvieHks5vWL5EgaJpZM4bnByH>
.
--
Daniel Galvez
http://danielgalvez.me
https://github.com/galv
|
@desh2608 can you please merge changes from master into kaldi10, resolving these merge conflicts and make a PR with those changes to the kaldi10 branch? (Now and whenever there is a conflict)... ask someone if you don't know how to resolve git conflicts. |
FYI, about shared_ptr, I was actually going to use it pretty heavily in the new tensor stuff, as I was broadly following the design of flashlight which does use it. |
* [src] Change warp-synchronous to cub::BlockReduce (safer but slower) (#3080) * [src] Fix && and || uses where & and | intended, and other weird errors (#3087) * [build] Some fixes to Makefiles (#3088) clang is unhappy with '-rdynamic' in compile-only step, and the switch is really unnecessary. Also, the default location for MKL 64-bit libraries is intel64/. The em64t/ was explained already obsolete by an Intel rep in 2010: https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/285973 * [src] Fixed -Wreordered warnings in feat (#3090) * [egs] Replace bc with perl -e (#3093) * [scripts] Fix python3 compatibility issue in data-perturbing script (#3084) * [doc] fix some typos in doc. (#3097) * [build] Make sure expf() speed probe times sensibly (#3089) * [scripts] Make sure merge_targets.py works in python3 (#3094) * [src] ifdef to fix compilation failure on CUDA 8 and earlier (#3103) * [doc] fix typos and broken links in doc. (#3102) * [scripts] Fix frame_shift bug in egs/swbd/s5c/local/score_sclite_conf.sh (#3104)
Well, as I said I am not an expert in this... I hope Kirill, or someone else, has more experience and will be able to give a more informed opinion about the possible alternatives. My understanding is that the pointer dereferencing itself is low-cost, so I guess it all depends on how exactly you will be using the shared_ptrs. If, for example, the object creation/pass-by-value etc is limited to some sort of bookkeeping code, outside the really "hot" parts, then it probably will not be very costly. |
It is interesting, how much can one learn from following this thread... And along the way, I am thinking how to experiment with splitting Kaldi into several git 'submodules', which could be stored as separate '--orphan' branches. I can imagine there could be a submodule for basic functionality 'src/base, src/matrix', another for 'src/lattice, src/decoder' and yet another for 'src/nnet' and another for 'script/' and another for 'egs/'. The modules could be activated/deactivated on demand by a script. Like this 'kaldi' could be more modular and usable as a collection of loosely coupled libraries. Say if someone wants to use matrix library, but does not want to install whole project, he could associate the matrix module. However, as it usually is, this flexibility would come for a price. Operating the repo would be more confusing for the inexperienced, as different git commands are used to operate submodules. Next, it would be more difficult to checkout the status of the whole project to a specific date back in time, as each submodule would have its own 'SHA1' code. Some reading: https://github.blog/2016-02-01-working-with-submodules/ Do you have some opinion on this? |
Aha, it seems that going back it time with 'main' module and sub-modules is not difficult: And it seems that the submodules can also import the git-history from the original place. |
The problem with supporting older code is that when we change things, it
would become our responsibility to fix those older things and support them.
We would probably continue supporting the existing version of Kaldi for
some time (years, probably), because there would be a lot of recipes and
features that it would take time to convert to the new version, and we'd
need to keep the old version working for the sake of comparisons,
regression testing, and the like.
Dan
…On Thu, Mar 14, 2019 at 7:18 AM Karel Vesely ***@***.***> wrote:
Aha, it seems that going back it time with 'main' module and sub-modules
is not difficult:
git checkout
git submodule update
And it seems that the submodules can also import the git-history from the
original place.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/ADJVu1018o0xrDJqxGVRw2tvtiZhk8Vwks5vWjAAgaJpZM4bnByH>
.
|
What I like about the fact that kaldi is a single repo is that it makes
testing very very easy. Judy test at HEAD.
I have made kaldi into a git submodule of another project before, Karel.
It worked fairly well for me. I could show
The one nice thing about having multiple modules is that it can decrease
build times. But at the same time, kaldi 10 removes quite a bit of source
code, so I am not very worried about that you if you are curious.
2019. március 14., csütörtök dátummal Daniel Povey <notifications@github.com>
ezt írta:
… The problem with supporting older code is that when we change things, it
would become our responsibility to fix those older things and support them.
We would probably continue supporting the existing version of Kaldi for
some time (years, probably), because there would be a lot of recipes and
features that it would take time to convert to the new version, and we'd
need to keep the old version working for the sake of comparisons,
regression testing, and the like.
Dan
On Thu, Mar 14, 2019 at 7:18 AM Karel Vesely ***@***.***>
wrote:
> Aha, it seems that going back it time with 'main' module and sub-modules
> is not difficult:
> git checkout
> git submodule update
>
> And it seems that the submodules can also import the git-history from the
> original place.
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#3083 (comment)>,
or mute
> the thread
> <https://github.com/notifications/unsubscribe-auth/
ADJVu1018o0xrDJqxGVRw2tvtiZhk8Vwks5vWjAAgaJpZM4bnByH>
> .
>
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AEi_UKbYyTmRAn6nBTlHKlyRXFvOJRjAks5vWpP0gaJpZM4bnByH>
.
--
Daniel Galvez
http://danielgalvez.me
https://github.com/galv
|
* [src] Change warp-synchronous to cub::BlockReduce (safer but slower) (#3080) * [src] Fix && and || uses where & and | intended, and other weird errors (#3087) * [build] Some fixes to Makefiles (#3088) clang is unhappy with '-rdynamic' in compile-only step, and the switch is really unnecessary. Also, the default location for MKL 64-bit libraries is intel64/. The em64t/ was explained already obsolete by an Intel rep in 2010: https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/285973 * [src] Fixed -Wreordered warnings in feat (#3090) * [egs] Replace bc with perl -e (#3093) * [scripts] Fix python3 compatibility issue in data-perturbing script (#3084) * [doc] fix some typos in doc. (#3097) * [build] Make sure expf() speed probe times sensibly (#3089) * [scripts] Make sure merge_targets.py works in python3 (#3094) * [src] ifdef to fix compilation failure on CUDA 8 and earlier (#3103) * [doc] fix typos and broken links in doc. (#3102) * [scripts] Fix frame_shift bug in egs/swbd/s5c/local/score_sclite_conf.sh (#3104) * [src] Fix wrong assertion failure in nnet3-am-compute (#3106) * [src] Cosmetic changes to natural-gradient code (#3108) * [src,scripts] Python2 compatibility fixes and code cleanup for nnet1 (#3113) * [doc] Small documentation fixes; update on Kaldi history (#3031) * [src] Various mostly-cosmetic changes (copying from another branch) (#3109)
I do, and I must admit it's not a favorable one. Using submodules and doing it right every time is a sign of the genuine Git-fu mastery at a black-belt level. Essentially, every submodule is a repo on its own, with its own set of changed files, and developing in this setup requires much more effort: keeping track of what you are changing in the module, sending upstream patches separately, keeping your local changes unpublished until the patch is accepted to the submodule repo. pulling it and resolving conflicts if there were review changes. They help when you maintain your own little patches of the third-party code, but keep their release in sync with it, but this may become taxing if your patches are extensive, and a divergence grows. This is all assuming you are grafting a third-party module into your tree; I cannot think of a good scenario using Git submodules in a single-owned project. This is not a casual thing; I believe the rule of thumb should be if you can avoid using submodules at the price of a lesser hassle than they are, or, even better, twice the hassle of what you think they are, do avoid them by all means--because you'll meet unintended consequences you could not even think of in the first place (unless you already have the black belt and can assess all these subtleties in advance). And since our contributors are of all the varying levels of Git proficiency, it will end up with an increased burden on the maintainers, realistically. The nnet1 code is not going away from the Git history ever; you can always "go back in time" to get a working tree with it, and fork off from any past point, modernize it and use, should a need arise. I may be wrong, but I do not think you are actively developing it as of now. I'd think first of the objective value in having it available and maintained as part of the toolkit. I sincerely do not know the answer, this is not a rhetorical question at all: how likely it is that someone would select nnet1 over a CTC nnet3 model if they start a new recipe? Is there any practical reason for that? If there is a compelling general interest for the user, then it's a reason to keep and maintain it. If that's unlikely at all, what is the point of maintaining it then. Our engineering trade is all about cost/benefit and rationally finding a nearly-the-best compromise, in the end. I know perfectly that I'm an end stage incurable introvert, so the workings of my inner cogs won't transfer to everyone; this is not an unasked-for advice at all, please do not treat it this way. But I feel it maybe a fitting moment to share it, although it may feel unnecessarily personal, and I am sorry if it does. My own experience with chopping off my old code has been that it has already had served its purpose: I've learned from it and know more than I did before I made it. I may keep it for reference to remind me of the ideas and techniques that I may reuse, but its chief value lies with the fact (or, well, a conviction) that what I've worked out in the past have already added to my experience and made me a better hacker, and this is not going away, even when the bits themselves do—and this is what really matters. For me, these bits' best intended purpose had been already served. I wish I've learned CUDA as well as you have! : ) |
|
I added get feature transform to nnet3 and nnet3bin. And removed nnet3-am-train-transition from python libs. Now training runs. I'll see if the results are correct. |
@danpovey aishell results
|
Fantastic!
Those differences could mostly be noise. There isn't anything that's
really expected to affect the results.
Nice to know that it's working.
…On Sun, Jul 21, 2019 at 8:30 PM Xingyu Na ***@***.***> wrote:
@danpovey <https://github.com/danpovey> aishell results
CER Kaldi5.5 Kaldi10
mono 36.41 35.79
tri1 18.76 18.83
tri2 18.64 18.57
tri3a 17.04 16.88
tri4a 13.82 13.49
tri5a 12.12 12.05
nnet3/tdnn_sp 8.65 8.54
chain/tdnn_sp 7.48 7.38
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083?email_source=notifications&email_token=AAZFLOYYTXB5EZMBXHZ33XLQAUSVPA5CNFSM4G44DSD2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2OVGUY#issuecomment-513626963>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAZFLO6MWSIBZDQT5FOYT4DQAUSVPANCNFSM4G44DSDQ>
.
|
* [src] Fixes RE unusual topologies * [src] Some fixes RE unusual topologies.
* [src] Fixes RE unusual topologies * [src] Various feature-extraction changes/simplifications, made while syncing with kaldi10feat python code * Some preliminary work on attention, saving a checkpoint * [src] Rewrite to nnet-computation-graph code to fix graph-building bug * [scripts] Add attention example * [egs] Add attention example * [scripts] Add use-relu option in attention.py, not used currently.
…abel in hmm-utils.cc that confused me.)
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
@jtrmal do you know anything about this stale-bot? |
Oh, Meixu @songmeixu set it up... |
I'm not excited about it, guys....
…On Fri, Jun 19, 2020 at 8:42 AM Daniel Povey ***@***.***> wrote:
Oh, Meixu @songmeixu <https://github.com/songmeixu> set it up...
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACUKYX4J3T6V3GGFS3Z6NHTRXMCEPANCNFSM4G44DSDQ>
.
|
You mean the stale-bot?
…On Fri, Jun 19, 2020 at 7:10 PM jtrmal ***@***.***> wrote:
I'm not excited about it, guys....
On Fri, Jun 19, 2020 at 8:42 AM Daniel Povey ***@***.***>
wrote:
> Oh, Meixu @songmeixu <https://github.com/songmeixu> set it up...
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#3083 (comment)>,
or
> unsubscribe
> <
https://github.com/notifications/unsubscribe-auth/ACUKYX4J3T6V3GGFS3Z6NHTRXMCEPANCNFSM4G44DSDQ
>
> .
>
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAZFLO57ESKN2VZ7IDC47YDRXNBR7ANCNFSM4G44DSDQ>
.
|
yeah.... that one... I'm worried it will be generating too much traffic for
me to be able to handle...
y.
On Fri, Jun 19, 2020 at 3:12 PM Daniel Povey <notifications@github.com>
wrote:
… You mean the stale-bot?
On Fri, Jun 19, 2020 at 7:10 PM jtrmal ***@***.***> wrote:
> I'm not excited about it, guys....
>
> On Fri, Jun 19, 2020 at 8:42 AM Daniel Povey ***@***.***>
> wrote:
>
> > Oh, Meixu @songmeixu <https://github.com/songmeixu> set it up...
> >
> > —
> > You are receiving this because you were mentioned.
> > Reply to this email directly, view it on GitHub
> > <#3083 (comment)>,
> or
> > unsubscribe
> > <
>
https://github.com/notifications/unsubscribe-auth/ACUKYX4J3T6V3GGFS3Z6NHTRXMCEPANCNFSM4G44DSDQ
> >
> > .
> >
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#3083 (comment)>,
or
> unsubscribe
> <
https://github.com/notifications/unsubscribe-auth/AAZFLO57ESKN2VZ7IDC47YDRXNBR7ANCNFSM4G44DSDQ
>
> .
>
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACUKYX7DQNQDXWMLAWN52RLRXNP27ANCNFSM4G44DSDQ>
.
|
Setting up GMail sorting filters now to cope with the thing. Looks like I
need to take over :)
|
Do you think i will continue to create lot of traffic now that all the
historic issues and PRs are closed?
…On Sat, Jun 20, 2020 at 12:40 PM kkm000 ***@***.***> wrote:
Setting up GMail sorting filters now to cope with the thing. Looks like I
need to take over :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAZFLO3WOGLPXO2JDP7VG2TRXQ4UZANCNFSM4G44DSDQ>
.
|
I think it was mainly the history cleanup. But we will see.
Y.
…On Sat, Jun 20, 2020 at 08:48 Daniel Povey ***@***.***> wrote:
Do you think i will continue to create lot of traffic now that all the
historic issues and PRs are closed?
On Sat, Jun 20, 2020 at 12:40 PM kkm000 ***@***.***> wrote:
> Setting up GMail sorting filters now to cope with the thing. Looks like I
> need to take over :)
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#3083 (comment)>,
or
> unsubscribe
> <
https://github.com/notifications/unsubscribe-auth/AAZFLO3WOGLPXO2JDP7VG2TRXQ4UZANCNFSM4G44DSDQ
>
> .
>
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3083 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACUKYXYTCNRACJYH3JTUGD3RXRLUJANCNFSM4G44DSDQ>
.
|
No, not at all, why? Please do! :)
I've been sorting all Kaldi-related messages into "subfolders," best approximation in GMail as label+skip inbox, with the exception of direct mention, which went straight into the main mailbox + phone bleep. The bot activity just triggered all the old direct mentions.
|
The name of this may change (e.g. could be kaldi2, or more likely kaldi 6.0).
What this is is a "cleaned up" version of Kaldi where we abandon any notion of back
compatibility with previous versions, remove a lot of little-used functionality, and
fix a lot of mistakes that were made in the past. The idea is to have a "big bang"
to do all the things that we wanted to do in the past, or considered doing, but were
prevented from doing by back compatibility considerations.
Note: this PR will not compile, the code needs a lot of work, it's just to show the direction.
Some of the changes included here are:
I need help on this with the files topology.cc and transitions.cc, to implement what I sketched out in the headers; and to get everything to compile.
The biggest change that I would like to make (and we should probably get the existing changes tested first), is a major refactoring of the Vector and Matrix and related classes, and the addition of an ndarray-type or Tensor-type class to handle tensors, that would be similar to NumPy and PyTorch. Some of the changes I would like to make include:
For the implementation of the Tensor class, we would try wherever possible to leverage existing code from the Vector/Matrix classes, i.e. those types would be used in the implementation where possible. This (with suitable loops) will cover all the common cases, and we can optimize things whenever we notice a bottleneck.
It would not be very hard to add automatic differentiation capability to these things by following the PyTorch/ArrayFire model; it's really not that many lines of code, thanks to C++11 magic. I would need help with the Python wrapping, but by closely following PyTorch, it wouldn't be that much work.
I looked into maybe using PyTorch's internal mechanisms for our own array stuff, but decided that it's too hard to compile, too poorly documented, and in too rapid a state of flux for us to rely on it right now. But we will definitely aim for interoperability with it as much as we can.
I do not rule out major changes to the scripting, the I/O or even to the whole approach to how Kaldi is used as a library, either. The idea is that we have a 'window' of maybe a few months where major changes are permitted, and back compatibility is not a concern (like the movie `The Purge', except for much longer).