Skip to content
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

Open
obo opened this issue Jan 2, 2017 · 22 comments
Open

Support shuffling after every epoch (for lazy datasets) #222

obo opened this issue Jan 2, 2017 · 22 comments

Comments

@obo
Copy link
Contributor

obo commented Jan 2, 2017

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.

@obo obo added this to the WMT17 Tuning Task milestone Jan 2, 2017
@jindrahelcl
Copy link
Member

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..

@obo
Copy link
Contributor Author

obo commented Jan 3, 2017 via email

@jindrahelcl jindrahelcl changed the title support shuffling after every epoch (for lazy datasets) Support shuffling after every epoch (for lazy datasets) Jan 9, 2017
@jindrahelcl
Copy link
Member

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.

@obo
Copy link
Contributor Author

obo commented Jan 19, 2017

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...

@jindrahelcl
Copy link
Member

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íš

@jindrahelcl
Copy link
Member

Jen pro přesnost - tři dny to trvá na rozbalených datech.

@jindrahelcl
Copy link
Member

Č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.

@obo obo removed this from the WMT17 Tuning Task milestone Jan 19, 2017
@obo
Copy link
Contributor Author

obo commented Jan 19, 2017

OK. Nechal byl to jako otevrene issue enhancement. Ale dal jsme to pryc z majlstounu, at mame dobry pocit.

@jindrahelcl
Copy link
Member

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. :-)

@kocmitom
Copy link
Contributor

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).

@jindrahelcl
Copy link
Member

jenze nematus podle mě nepodporuje lazy datasety, ten to prostě všecko nasouká do paměti, ne?

@kocmitom
Copy link
Contributor

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)

@obo
Copy link
Contributor Author

obo commented Jan 23, 2017 via email

@kocmitom kocmitom reopened this Jan 24, 2017
@jlibovicky
Copy link
Contributor

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ů.

@kocmitom
Copy link
Contributor

@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)

@jindrahelcl
Copy link
Member

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..

@obo
Copy link
Contributor Author

obo commented Jan 24, 2017 via email

@obo
Copy link
Contributor Author

obo commented Jan 24, 2017 via email

@jindrahelcl
Copy link
Member

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.

@obo
Copy link
Contributor Author

obo commented Jan 24, 2017 via email

@jindrahelcl
Copy link
Member

Vážil bych hlasy podle contributions (https://github.com/ufal/neuralmonkey/graphs/contributors) ;-)

@jlibovicky
Copy link
Contributor

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants