-
Notifications
You must be signed in to change notification settings - Fork 103
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
Support shuffling after every epoch (for lazy datasets) #222
Comments
to by mělo jít mnohem jednoduššejc, stačí na to před otevřením zavolat shuf a žrát výstup za pajpou. Věděl bych, jak to udělat v Perlu, v Pythonu to snad taky nebude problém.. |
Je to paralelní korpus a některý encodery např. mohou čerpat data adresáře wav souborů. Takže pipa, jakkoli bych ji nejradši, není úplně použitelná.
3. ledna 2017 18:44:38 SEČ, Jindra Helcl <[email protected]> napsal:
…to by mělo jít mnohem jednoduššejc, stačí na to před otevřením zavolat
shuf a žrát výstup za pajpou. Věděl bych, jak to udělat v Perlu, v
Pythonu to snad taky nebude problém..
|
Nevim, asi bych tuhle issue tak, jak je napsaná, neřešil. Nenapadá mě, jak to udělat nějak pořádně. Odfláknout si to může asi každej tim, že si ty data n-krát zashufluje za sebe předem a pustí to na jednu epochu. Místa to bude konzumovat furt stejně, leda by se tam ještě přidalo nějaký mazání, ale to bych se zas bál, že se to vymkne z rukou.. Když nemáš zas tak velký data, tak se vejdou do paměti. Lazy dataset přibyl až v září a předtim jsem v klídku trénoval na QTLeapovskejch datech (tj. europarl + nějaký další IT data) v paměti. |
Ja porad vaham, zda a jak to udelat. CzEng 1.6 je 50 milionu vetnych paru. I kdyz se to deduplikuje jeste vic nez to deduplikujeme my, je to 2 GB zagzipovane, viz http://ufal.mff.cuni.cz/czeng/czeng16pre To uz neni dobre drzet v pameti (notabene rozgzipovane). A taky neni uplne prijemne z toho delat nasobky v jednom na disku, i kdyz to je snadna cesta. Neprijemne je to hlavne proto, ze clovek uplne nevi, kolik tech nasobku by si asi tak mel nachystat... |
Hele tu jednu epochu takhle velkých dat to projde tak za tři dny. Takže stačí si ty data dát dvakrát nebo třikrát za sebe a po deseti dnech, když budeš chtít trénovat dál, tak to udělat ještě jednou. Vždy můžeš navázat trénování, takže to dopředu vědět nemusíš |
Jen pro přesnost - tři dny to trvá na rozbalených datech. |
Čili závěr je, že si nemyslim, že se nám nějak vyplatí, když to v neuralmonkey bude. Jiný toolkity to rozhodně nemají a lidi s tim taky nějak přežívaj. |
OK. Nechal byl to jako otevrene issue enhancement. Ale dal jsme to pryc z majlstounu, at mame dobry pocit. |
Až na to přijde, tak se může udělat nová issue, ale aby to tady rok hnilo, aby to pak někdo zavřel, to to radši zavřu hned. Ať mam dobrý pocit. :-) |
No uprimne tohle je podle me zrovna docela dulezita vec a nezaviral bych to :) ... I napriklad nematus to v sobe ma (tak nevim uplne ktere jine podobne frameworky ted myslis). |
jenze nematus podle mě nepodporuje lazy datasety, ten to prostě všecko nasouká do paměti, ne? |
nn nematus si to zamicha jeste na disku pred kazdou epochou a pak to cte postupne. (vznika mu tam teda duplicitni kopie dat, ale to nevidim jako problem) |
Přesně nějaké takové triviální řešení jsem si představoval, když jsem říkal, že bychom to měli dělat. Stačí zavolat uživatelův skript, ať si zamíchá, co je jak potřeba.
23. ledna 2017 16:19:37 SEČ, tomkocmi <[email protected]> napsal:
…nn nematus si to zamicha jeste na disku pred kazdou epochou a pak to
cte postupne. (vznika mu tam teda duplicitni kopie dat, ale to nevidim
jako problem)
|
Já tedy nevím, jak bych to udělal. Je potřeba zavolat to shufflování na každou vstupní series stejně. Vstupní series se ale může dělat dokonce ze seznamu souborů. Kromě plaintextu, který se dál nějak zpracuje (třeba jsou to cesty k obrázkům) umíme načítat numpy tenzory. Nechce se mi všech těhle featur vzdát jenom proto, abychom mohli udělat nějaké triviální řešení na míchání celých datasetů. |
@jlibovicky to je docela rozumny duvod, to pak taky souhlasim, ze bych spis shufflovani nedelal. Pak me tedy napadaji dve mozne reseni, bud udelat pouze specialni ShuffleLazyDataset a nebo to michat postupne (nacist si treba data na 100 batchi a v ramci toho to zashufflovat) |
To se bude muset promyslet a zkombinovat s tím tříděním podle délky vět. Ale dejme tomu, že přednačtení 1000 batchí (tj zhruba mezi dvěma validacema), zashufflování a přednačítání po dvaceti batchích, který by se třídily podle délky by asi šlo.. |
Prave to, ze vim, co Jindrich potrebuje (a ja zas vidim seznam souboru *.wav v jinych aplikacich), od pocatku navrhuju toto trivialni reseni:
[tf_manager] (nebo [main], chcete-li)
before_epoch_callback = "./muj-specificky-experiment/priprav-mi-data.sh"
Ja, coby autor pokusu i konfiguraku vim, kde konfigurak predpoklada data. V tom skriptu, ktery je de facto pevnou soucasti konfiguraku, si z nejakeho primarniho zdroje spravnym shufflovanim pripravim dataset, na ktery se ostatni casti konfiguraku odkazuji.
Cili pak jen staci, aby vsechny soucasti kodu vedely, ze si po kazde epose maji vzit data znovu. lazy=True to zajisti pro ty standardni sekvence, filelisty na obrazky (nebo co pouzivate) se musi taky stat v tomto smeru lazy.
Podle mne je to elegantne jednoduche a zdaleka nejuniverzalnejsi.
O.
…----- Original Message -----
From: "tomkocmi" ***@***.***>
To: "ufal/neuralmonkey" ***@***.***>
Cc: "Ondrej Bojar" ***@***.***>, "Author" ***@***.***>
Sent: Tuesday, 24 January, 2017 12:54:39
Subject: Re: [ufal/neuralmonkey] Support shuffling after every epoch (for lazy datasets) (#222)
@jlibovicky to je docela rozumny duvod, to pak taky souhlasim, ze bych spis
shufflovani nedelal. Pak me tedy napadaji dve mozne reseni, bud udelat pouze
specialni ShuffleLazyDataset a nebo to michat postupne (nacist si treba data na
100 batchi a v ramci toho to zashufflovat)
--
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub:
#222 (comment)
|
Jen dodavam, ze kdyz ten zcela customizovany skript udelam chytry, tak muze samozrejme delat i to trideni dle delky.
Ano, idealne tohle resi learner v NM, ale ten prave vyzaduje tolik informaci, ze je pracne a "predcasna optimalizace API" davat to tam ted.
…----- Original Message -----
From: "Jindra Helcl" ***@***.***>
To: "ufal/neuralmonkey" ***@***.***>
Cc: "Ondrej Bojar" ***@***.***>, "Author" ***@***.***>
Sent: Tuesday, 24 January, 2017 13:27:39
Subject: Re: [ufal/neuralmonkey] Support shuffling after every epoch (for lazy datasets) (#222)
To se bude muset promyslet a zkombinovat s tím tříděním podle délky vět. Ale
dejme tomu, že přednačtení 1000 batchí (tj zhruba mezi dvěma validacema),
zashufflování a přednačítání po dvaceti batchích, který by se třídily podle
délky by asi šlo..
--
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub:
#222 (comment)
|
Pořád platí muj argument, na kterej jsi neodpověděl - u dat, který jsou velký 2GB ti to stačí dát max 3x za sebe a máš na tři tejdny vystaráno. Jakmile to doběhne, můžeš to udělat znova a pokračovat. Moje politický rozhodnutí je nemotat do toho externí skripty. |
Jo jo, je to tak. Nezbyva mi nez souhlasit.
V politickem systemu hlasuju opacne, ale nevim, ma-li hlas jakou vahu. :-)
…----- Original Message -----
From: "Jindra Helcl" ***@***.***>
To: "ufal/neuralmonkey" ***@***.***>
Cc: "Ondrej Bojar" ***@***.***>, "Author" ***@***.***>
Sent: Tuesday, 24 January, 2017 13:49:43
Subject: Re: [ufal/neuralmonkey] Support shuffling after every epoch (for lazy datasets) (#222)
Pořád platí muj argument, na kterej jsi neodpověděl - u dat, který jsou velký
2GB ti to stačí dát max 3x za sebe a máš na tři tejdny vystaráno. Jakmile to
doběhne, můžeš to udělat znova a pokračovat.
Moje politický rozhodnutí je nemotat do toho externí skripty.
--
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub:
#222 (comment)
|
Vážil bych hlasy podle contributions (https://github.com/ufal/neuralmonkey/graphs/contributors) ;-) |
Aha, @obo, já jsem celou dobu myslel, že to má být skript, co se zavolá na každou series zvlášť. Já bych proti tomu asi nic neměl. |
Shuffling is potentially very important. Large datasets are now supported only through lazy=True.
NM needs to support corpus shuffling after every epoch. One simple workaround is to add e.g. main.callback_after_epoch=/patch/to/custom/script.bash my-hardcoded-params
Could someone add this? The idea is that the callback call would have everything hardcoded in the ini, NM would not interpret any variables, just run system() on the string.
The text was updated successfully, but these errors were encountered: