--- Log opened Wed May 11 00:00:51 2016 | ||
-!- HeikoS [~heiko@host-92-0-162-192.as43234.net] has joined #shogun | 00:13 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 00:13 | |
-!- HeikoS [~heiko@host-92-0-162-192.as43234.net] has quit [Ping timeout: 244 seconds] | 00:18 | |
-!- lstsn is now known as lisitsyn | 01:50 | |
lisitsyn | ENOUGH | 01:50 |
---|---|---|
-!- besser82_ [~besser82@fedora/besser82] has quit [Ping timeout: 244 seconds] | 03:08 | |
-!- mizari [~mizari@95-174-213-100.nts.su] has joined #shogun | 06:06 | |
Saurabh7 | CaBa, well if the cast fails it returns a null pointer, so its a check that it is not | 06:11 |
Saurabh7 | and since its a SGObject pointer we know nothing about it, for other we know its Base class type so we can use the members to check | 06:34 |
-!- besser82_ [~besser82@fedora/besser82] has joined #shogun | 09:12 | |
-!- mode/#shogun [+o besser82_] by ChanServ | 09:13 | |
@wiking | CaBa: where's this? | 09:27 |
@wiking | Saurabh7: hey here? | 10:52 |
Saurabh7 | wiking, hey sry was afk | 11:13 |
-!- HeikoS [~heiko@host-92-0-162-192.as43234.net] has joined #shogun | 11:14 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 11:14 | |
Saurabh7 | HeikoS, hi ! | 11:15 |
-!- HeikoS [~heiko@host-92-0-162-192.as43234.net] has quit [Quit: Leaving.] | 11:22 | |
CaBa | wiking: in my fork | 11:22 |
CaBa | Saurabh7: i see... i should probably implement it the same way then... | 11:24 |
@wiking | Saurabh7: how's going with your preparations? | 11:28 |
-!- HeikoS [~heiko@host-92-0-162-192.as43234.net] has joined #shogun | 11:35 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 11:35 | |
@wiking | HeikoS: yo | 11:37 |
@HeikoS | wiking: yoyo | 11:49 |
@HeikoS | Saurabh7: hi! | 11:49 |
Saurabh7 | HeikoS, yo | 11:59 |
Saurabh7 | wiking, I had made a list of things, mailed it to HeikoS, i will forward it to you. it covers a many things, might have to tune it a bit. | 12:00 |
Saurabh7 | But basicaly i found big performance difference similar to Kmeans in few say decision trees id3 etc, clustering algo etc | 12:01 |
Saurabh7 | others its comparable but could be parallelized and improved i think | 12:01 |
Saurabh7 | like this issue wu pointed out in random forests | 12:01 |
@HeikoS | great! | 12:02 |
@HeikoS | Saurabh7: I was a bit busy recently, sorry | 12:02 |
@HeikoS | but will read today or tomorrow and give feedback | 12:02 |
Saurabh7 | HeikoS, its almost same as in proposal but need to decide preferences and whats important maybe | 12:03 |
Saurabh7 | HeikoS, np :) | 12:03 |
@HeikoS | yeah definitely | 12:04 |
@HeikoS | Saurabh7: what you should do at this point in time is to investigate | 12:04 |
@HeikoS | so document and explore as good as possible: | 12:04 |
@HeikoS | 1.) which algorithms are slow | 12:05 |
@HeikoS | 2.) how slow | 12:05 |
@HeikoS | 3.) in which setting they are slow | 12:05 |
@HeikoS | 4.) what might be the reason | 12:05 |
@HeikoS | so this is purely exploring, but very explicitly | 12:05 |
@HeikoS | the other thing is: try to create a priority list | 12:05 |
@HeikoS | 1.) algorithms which are very fundemental should have high priority | 12:06 |
@HeikoS | 2.) algorithms which are extremely slow should have high priority | 12:06 |
@HeikoS | maybe you can order them according to that | 12:06 |
Saurabh7 | HeikoS, hm ok i will try to build up on this things already found and try to answer this points | 12:06 |
Saurabh7 | HeikoS, what about this feature view thing, it had been discussed long ago | 12:07 |
@HeikoS | Saurabh7: basically, when gsoc starts, there should be no doubts on what to do | 12:07 |
Saurabh7 | it might be needed to paralllieze things like random forests | 12:07 |
@HeikoS | so all decision making should happen now | 12:07 |
@HeikoS | Saurabh7: that doesnt have priority, its more linalg/internals | 12:07 |
@wiking | Saurabh7: okey just fwd the email plz | 12:07 |
@HeikoS | Saurabh7: or do you need it anywhere? | 12:08 |
Saurabh7 | HeikoS, ok | 12:08 |
Saurabh7 | HeikoS, to parallelize some algos it might be needed | 12:08 |
@HeikoS | Saurabh7: I recently played a bit more with cache locality, that is, read data from memory in sequential order, which can make a huge difference | 12:08 |
Saurabh7 | HeikoS, https://github.com/shogun-toolbox/shogun/issues/3182 | 12:08 |
@HeikoS | Saurabh7: you could think how that can be applied to shogun algos | 12:08 |
@HeikoS | example for that: create a large matrix | 12:09 |
Saurabh7 | HeikoS, thats a new one i will look into it | 12:09 |
@HeikoS | and iterate through all values of it (e.g. sum them up) | 12:09 |
@HeikoS | then compare the performance of random order | 12:09 |
@HeikoS | vs sequential order | 12:09 |
@HeikoS | and you will find large differences | 12:09 |
@HeikoS | if you understand this principle, then you can often gain a factor of 2 or even more | 12:10 |
@HeikoS | Saurabh7: I sent an email with some pictures that illustrate it | 12:10 |
@HeikoS | ok gotta run now, see you later | 12:11 |
Saurabh7 | sounds good i will look surely | 12:11 |
Saurabh7 | HeikoS, ok cya | 12:11 |
-!- HeikoS [~heiko@host-92-0-162-192.as43234.net] has quit [Ping timeout: 260 seconds] | 12:15 | |
CaBa | I made my implementation of CParameterCombination::obtain_from_generic() to perform the same checks as CKernel::obtain_from_generic(). The casting function allows to iterate over parameter combinations from python, which currently didn't work as expected by the example in modelselection_parameter_tree_modular.py. | 12:16 |
CaBa | Do you mind if I PR this? | 12:16 |
@wiking | no | 12:29 |
@wiking | go ahead! | 12:29 |
@wiking | Saurabh7: email | 12:29 |
@wiking | :) | 12:29 |
Saurabh7 | wiking, oops sent | 12:34 |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has joined #shogun | 13:05 | |
sanuj | why don't we have a gitter room | 13:07 |
sanuj | it's better | 13:07 |
sanuj | and everyone uses it | 13:07 |
sanuj | torch, bvlc caffe | 13:07 |
sanuj | openai gym | 13:09 |
sanuj | scikit learn also | 13:09 |
sanuj | i just remembered | 13:11 |
sanuj | we had it | 13:11 |
sanuj | https://gitter.im/shogun-toolbox/shogun | 13:11 |
sanuj | besser82_: there? | 13:14 |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has quit [Ping timeout: 250 seconds] | 13:32 | |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has joined #shogun | 13:32 | |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has quit [Ping timeout: 250 seconds] | 13:36 | |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has joined #shogun | 13:45 | |
@wiking | sanuj: we have a gitter room | 13:51 |
@wiking | but dont tell me that gitte ris better than irc :) | 13:51 |
sanuj | haha | 13:51 |
@wiking | it's like at least 25 years older and more mature/open protocol (irc) | 13:52 |
sanuj | i see | 13:52 |
@wiking | but we do have a gitter room | 13:53 |
sanuj | i could only tell from the point of view of a user using it | 13:53 |
sanuj | yeh i know | 13:53 |
@wiking | there's less people in the gitter room :) | 13:54 |
@wiking | sanuj: ah you wanna bet that there are 100x more people using irc | 13:54 |
@wiking | than gitter ?:) | 13:54 |
@wiking | at least | 13:54 |
sanuj | yes definitely, more people use irc | 13:54 |
sanuj | :D | 13:55 |
@wiking | https://tools.ietf.org/html/rfc1459 | 13:55 |
@wiking | :) | 13:55 |
sanuj | the link is not opening here | 13:57 |
sanuj | wiking: can you tell me how to get started with dynaplugz? | 13:57 |
sanuj | we should have the plugin frame work ready and working before the coding period starts | 13:59 |
-!- HeikoS [~heiko@80.169.91.26] has joined #shogun | 13:59 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 13:59 | |
@wiking | sanuj: ok | 14:01 |
@wiking | so we definitely want to have a shogun-base | 14:01 |
sanuj | on github | 14:04 |
sanuj | besser82_ said he will write the basic code required and then i can continue | 14:04 |
sanuj | but the last commit is from march | 14:04 |
Saurabh7 | sanuj, ping | 14:23 |
sanuj | Saurabh7: yo | 14:23 |
Saurabh7 | sanuj, did oyu get some call form fedex ? | 14:24 |
sanuj | Saurabh7: nope | 14:24 |
-!- mizari [~mizari@95-174-213-100.nts.su] has quit [Read error: Connection reset by peer] | 14:24 | |
Saurabh7 | hm | 14:25 |
sanuj | what about | 14:25 |
sanuj | gsoc package? | 14:25 |
-!- mizari [~mizari@95-174-213-100.nts.su] has joined #shogun | 14:25 | |
Saurabh7 | ye did you get yours ? | 14:26 |
sanuj | no i didn't anything | 14:26 |
sanuj | did you get yours? | 14:27 |
Saurabh7 | stuck at customs :D i dunno tf that guy wanted,some forms | 14:27 |
sanuj | oh | 14:28 |
lisitsyn | oh good you remind me | 14:35 |
lisitsyn | I should send my tshirt to sonney2k_ | 14:36 |
lisitsyn | sanuj: how's it going? | 14:44 |
sanuj | lisitsyn: i got some easy c++ code working with swig to produce python bindings | 14:45 |
sanuj | read about templates and classes | 14:46 |
sanuj | need to write the interface for the tags prototype | 14:46 |
lisitsyn | cool | 14:46 |
lisitsyn | let me know if you need any help | 14:46 |
sanuj | i want to start contributing to dynaplugz | 14:46 |
sanuj | bjorn wanted to write the base code first | 14:47 |
sanuj | besser82_: ping | 14:47 |
sanuj | we should have a working plugin framework before the coding period begins | 14:47 |
@wiking | sanuj: | 14:48 |
sanuj | yes | 14:49 |
@wiking | there are couple of things | 14:49 |
lisitsyn | yeah but that's easy | 14:49 |
@wiking | what we need to decide | 14:49 |
lisitsyn | no need for mature library | 14:49 |
@wiking | do we want like a new repo | 14:49 |
@wiking | for all of these? | 14:49 |
@wiking | but the other stuff is | 14:50 |
@wiking | just to port in all the base classes, i.e. interfaces | 14:50 |
@wiking | into one module | 14:50 |
lisitsyn | I vote for adding new stuff to SGObject directly | 14:50 |
@wiking | like/ | 14:51 |
@wiking | ? | 14:51 |
lisitsyn | wiking: get/set with tags | 14:51 |
lisitsyn | and string-based get/set | 14:51 |
@wiking | ah yeah | 14:51 |
sanuj | i think we should have a separate repo where we migrate all the old shogun classes once we have the base-shogun ready | 14:51 |
@wiking | mmm | 14:51 |
@wiking | no | 14:51 |
lisitsyn | that would be a mess | 14:52 |
@wiking | that's for sure not a good idea :) | 14:52 |
sanuj | and i think base-shogun should have dynamic plugin loading and whatever lisitsyn has added | 14:52 |
sanuj | okay :) | 14:52 |
@wiking | we should separate repos | 14:52 |
@wiking | into different things | 14:52 |
@wiking | like kernels | 14:52 |
@wiking | features | 14:52 |
@wiking | etc | 14:52 |
@wiking | that way things are more traceable | 14:52 |
@wiking | maybe | 14:52 |
@wiking | :) | 14:52 |
lisitsyn | not sure | 14:52 |
@wiking | but we could do even more tricky stuff | 14:52 |
@wiking | :) | 14:52 |
sanuj | so you mean diff repo for kernel, diff repo for features and so on? | 14:52 |
@wiking | either that | 14:53 |
@wiking | or even go with 1 repo for all | 14:53 |
lisitsyn | I am not a fan of splitting repos | 14:53 |
lisitsyn | (I work for big company haha) | 14:53 |
@wiking | and have things a bit differently partitions | 14:53 |
@wiking | *partitioned | 14:53 |
sanuj | haha | 14:53 |
sanuj | will each repo be a plugin? | 14:53 |
@wiking | nono | 14:54 |
@wiking | meaning we have 1 repos | 14:54 |
@wiking | *repo | 14:54 |
@wiking | but there you simply just have a separate folder for each 'plugin' | 14:54 |
lisitsyn | versioning stuff would be tough though | 14:54 |
lisitsyn | tags won't work | 14:54 |
lisitsyn | branches won't work | 14:54 |
lisitsyn | wiking: I think we should tell our plugins from other plugins | 14:55 |
lisitsyn | I mean it could be ok if we have a set of plugins synchronized with the main repo | 14:55 |
@wiking | ah i see | 14:55 |
lisitsyn | but not fancy impl of paper of HeikoS | 14:55 |
@wiking | :> | 14:55 |
@wiking | yeah we could do that as well | 14:56 |
sanuj | haha | 14:56 |
lisitsyn | then we can go with the 'plugins/' directory | 14:56 |
@wiking | yeah | 14:56 |
@wiking | but we definitely | 14:56 |
sanuj | these will be the essential plugins installed with base shogun? | 14:56 |
@wiking | need a separate repo | 14:56 |
@wiking | for GPL stuff | 14:56 |
lisitsyn | sanuj: yes, but not loaded by default | 14:57 |
@wiking | yeah by default nothing is loaded | 14:57 |
@wiking | but yeah we should define | 14:57 |
@wiking | the whole shogun-base | 14:57 |
sanuj | lisitsyn: loaded when only called from python or equivalent | 14:57 |
@wiking | that is the base fw | 14:57 |
@wiking | or from c++ | 14:57 |
sanuj | how do i go from dynaplugz to shogun-base? | 14:59 |
@wiking | mmm | 14:59 |
@wiking | so first you have the interfaces | 15:00 |
@wiking | and sgobject needs to be extended | 15:00 |
@wiking | to support tags | 15:00 |
-!- HeikoS [~heiko@80.169.91.26] has quit [Ping timeout: 250 seconds] | 15:01 | |
sanuj | just to be clear, interfaces are swig interfaces right? | 15:01 |
@wiking | no | 15:01 |
sanuj | oh | 15:02 |
@wiking | interfaces are the abstract classes in shogun codebase | 15:02 |
sanuj | okay | 15:02 |
@wiking | interface = java semantics | 15:02 |
sanuj | i see | 15:02 |
sanuj | so extended sgobject and all abstract classes | 15:03 |
@wiking | mmm | 15:03 |
@wiking | have you checked shogun's code? | 15:03 |
@wiking | i mean like CKernel | 15:03 |
@wiking | and CFeatures | 15:03 |
sanuj | not in detail | 15:03 |
@wiking | are all derived from SGObject | 15:03 |
sanuj | yes | 15:04 |
sanuj | i know that | 15:04 |
sanuj | everything is derived from sgobject | 15:04 |
@wiking | not really | 15:04 |
@wiking | :) | 15:04 |
@wiking | but most of the things | 15:04 |
sanuj | okay | 15:04 |
sanuj | :) | 15:04 |
@wiking | so please | 15:04 |
@wiking | start looking at shogun's code in detail | 15:05 |
@wiking | and for example | 15:05 |
@wiking | let's put a list together | 15:05 |
sanuj | yes sir :D | 15:05 |
@wiking | which classes shoudl be in that | 15:05 |
lisitsyn | yeah there must be a list | 15:05 |
lisitsyn | which interfaces are core | 15:06 |
@wiking | indeed | 15:06 |
@wiking | sanuj: maybe start a gdocs | 15:06 |
@wiking | and share it | 15:06 |
sanuj | okay | 15:06 |
@wiking | so we can discuss this easier | 15:06 |
lisitsyn | yeah whatever way | 15:06 |
lisitsyn | I can deffs say | 15:06 |
lisitsyn | CDotFeatures, CFeatures, CKernel, CDistance, ... | 15:06 |
@wiking | yep | 15:06 |
@wiking | CMachine | 15:06 |
lisitsyn | but there are some cases | 15:06 |
lisitsyn | not that easy cases ;P | 15:07 |
@wiking | yeh maybe some refacts will be required | 15:07 |
@wiking | but anyhow | 15:07 |
@wiking | let's have a list | 15:07 |
@wiking | about which we can start discussing | 15:07 |
lisitsyn | wiking: sanuj: it could be a list of exports for swig | 15:07 |
@wiking | yep | 15:07 |
lisitsyn | renames | 15:07 |
@wiking | sanuj: check how the renames are done | 15:08 |
@wiking | within current shogun | 15:08 |
@wiking | for swig | 15:08 |
sanuj | i saw in the shogun code | 15:08 |
@wiking | so in that format | 15:08 |
@wiking | lets have a list | 15:08 |
@wiking | :) | 15:08 |
sanuj | for templates | 15:08 |
@wiking | not only | 15:08 |
@wiking | it's for all classes | 15:08 |
sanuj | yes | 15:08 |
@wiking | that are exposed for swig interfaces | 15:08 |
-!- CaBa [~Diu7saig@unaffiliated/caba] has quit [Ping timeout: 250 seconds] | 15:11 | |
-!- CaBa [~Diu7saig@unaffiliated/caba] has joined #shogun | 15:12 | |
sanuj | wiking: gmail id | 15:12 |
@wiking | vigsterkr | 15:13 |
sanuj | wiking: lisitsyn https://docs.google.com/document/d/15oCKKYJwvdHSxA8ohq6f4EOsJwfu-gxKhRLj3sj6cuM/edit?usp=sharing | 15:14 |
lisitsyn | yeah let's just not lose the link :D | 15:16 |
@wiking | :> | 15:17 |
sanuj | do we want a gist | 15:18 |
@wiking | if you write code | 15:19 |
@wiking | then yes | 15:19 |
sanuj | wiking: but how will multiple people edit it? | 15:23 |
sanuj | i'm talking about github gist | 15:23 |
@wiking | eveyr gist is a repo essentially | 15:25 |
sanuj | wiking: lisitsyn https://gist.github.com/sanuj/56f03cd242473137fad851e68fa0f2c1 | 15:26 |
@wiking | md? | 15:27 |
lisitsyn | lol | 15:27 |
@wiking | arent' we writing a .i file? :) | 15:27 |
lisitsyn | that's ok | 15:27 |
@wiking | anyhooooooooooooow | 15:27 |
@wiking | lets' just do it | 15:27 |
lisitsyn | wiking: we can ``` ``` | 15:27 |
@wiking | `````````````````````````````` | 15:27 |
@wiking | `````````````````` | 15:27 |
@wiking | :> | 15:27 |
@wiking | ^ can | 15:27 |
lisitsyn | ``````` | 15:27 |
sanuj | i'll rename it | 15:27 |
sanuj | :) | 15:28 |
sanuj | done | 15:29 |
sanuj | how does it work with gists | 15:32 |
sanuj | i don't think there are PRs | 15:32 |
lisitsyn | no why | 15:33 |
lisitsyn | sanuj: | 15:33 |
lisitsyn | you just edit it | 15:33 |
lisitsyn | and we comment | 15:33 |
lisitsyn | I think you can give us access if necessary | 15:33 |
sanuj | no access thingy here | 15:34 |
lisitsyn | nah nevermind then | 15:34 |
lisitsyn | ok commented | 15:36 |
Saurabh7 | lord | 15:57 |
CaBa | sanuj: you are from assam? :) | 16:40 |
sanuj | CaBa: i study in assam :D | 16:40 |
sanuj | but i'm from Jaipur | 16:40 |
CaBa | sanuj: ah, i see | 16:43 |
sanuj | CaBa: are you from india? | 16:45 |
CaBa | sanuj: nope, i'm from germany. assam just raised my attention since i just recently became aware of the seven sister states when i travelled myanmar | 16:47 |
CaBa | sanuj: kinda embarassing but that part of india wasn't in my brain world map before :) | 16:48 |
sanuj | CaBa: oh i see :) | 16:48 |
CaBa | sanuj: from india i've only seen the very south so far, mostly tamil nadu | 16:49 |
CaBa | there might be an opportunity to see the north this year though :) | 16:49 |
sanuj | great! | 16:50 |
sanuj | ironically i have never been to tamil nadu | 16:51 |
sanuj | have some friends there | 16:51 |
sanuj | most southern part that i have visited is Mumbai | 16:51 |
sanuj | CaBa: roamed around a lot in north though | 16:52 |
CaBa | :D | 16:53 |
CaBa | totally on the todo list | 16:53 |
CaBa | i'm also somewhat curious about bhutan | 16:54 |
Saurabh7 | you guys should visit Goa :D | 17:00 |
sanuj | haha | 17:02 |
-!- OXPHOS [8ca3fe9e@gateway/web/freenode/ip.140.163.254.158] has joined #shogun | 17:03 | |
OXPHOS | Im late for the party : ( | 17:05 |
@wiking | :) | 17:07 |
@wiking | what party | 17:07 |
@wiking | goa party? | 17:07 |
CaBa | Saurabh7: not that much into party tourism ;) | 17:08 |
Saurabh7 | CaBa, ah i see :) | 17:09 |
-!- travis-ci [~travis-ci@ec2-54-224-16-174.compute-1.amazonaws.com] has joined #shogun | 17:09 | |
travis-ci | it's lambday's turn to pay the next round of drinks for the massacre he caused in shogun-toolbox/shogun: https://travis-ci.org/shogun-toolbox/shogun/builds/129440847 | 17:09 |
-!- travis-ci [~travis-ci@ec2-54-224-16-174.compute-1.amazonaws.com] has left #shogun [] | 17:09 | |
OXPHOS | wiking: fancier one.. saw the irc log. Lots of people around : ) | 17:11 |
lisitsyn | you should visit moskva! | 17:13 |
-!- HeikoS [~heiko@nat-240-186.internal.eduroam.ucl.ac.uk] has joined #shogun | 17:15 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 17:15 | |
CaBa | lisitsyn: :D | 17:18 |
sanuj | lisitsyn: you got back your vowels!!!!!!!!!!!!!!!! | 17:18 |
Saurabh7 | davai moskva | 17:18 |
sanuj | i need to train a model now which requires all of my laptop's ram | 17:23 |
sanuj | so goodbye chrome :P | 17:23 |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has quit [Quit: Page closed] | 17:23 | |
@wiking | sanuj: for the (irc) record: use irsii or bitchx ;) | 17:35 |
@wiking | lisitsyn: who's your client? :D | 17:35 |
lisitsyn | wiking: irssi over znc | 17:36 |
@wiking | yep | 17:42 |
@wiking | i wanna try again bitchx :) | 17:43 |
@wiking | i really liked that client | 17:43 |
@wiking | : | 17:43 |
@wiking | : | 17:43 |
@wiking | : | 17:43 |
@wiking | :> | 17:43 |
lisitsyn | BitchX is the most popular IRC client among Unix systems. You can also use it on Windows, but if you had a Picasso painting, would you put it in the bathroom? | 17:50 |
@wiking | :) | 17:50 |
CaBa | wiking: did you... just recommend bitchx?! | 17:53 |
@wiking | best client ever | 17:53 |
@wiking | why | 17:53 |
@wiking | ? | 17:53 |
CaBa | interesting... where i come from it's considered worse than mIRC ^^ | 17:54 |
@wiking | mirc fuck | 17:54 |
@wiking | that is a piece of fucking shit | 17:54 |
CaBa | does bitchx still do this terrible bold type thing? | 17:55 |
CaBa | wiking: yes. that's why i mentioned it to illustrate bitchx's reputation ^^ | 17:55 |
@wiking | so what's a good client for you? :) | 17:56 |
CaBa | irssi of course | 17:56 |
@wiking | :D | 17:56 |
CaBa | i didn't know there was another opinion! | 17:56 |
CaBa | does emacs exist? ;) | 17:56 |
@wiking | yeah | 17:56 |
OXPHOS | I don't want to rush you guys..but it would be nice if someone can take a look at my proposal? @ wiking, HeiKoS : ) | 17:57 |
lisitsyn | which? | 17:57 |
@HeikoS | OXPHOS: hey hey :) | 17:59 |
@HeikoS | sorry I was so busy recently | 17:59 |
@wiking | oh | 17:59 |
@HeikoS | but its better soon | 17:59 |
@wiking | but wait | 17:59 |
@wiking | where's the proposal :D | 18:00 |
OXPHOS | lisitsyn: Assuming you're talking to me..The Detox Project. I currently only shared with the assigned mentors but I'd love to have you look at it. Though I think I'll harass you with cookbook problem : ) | 18:00 |
@wiking | :DDDDDDDDDDDDDD | 18:00 |
@wiking | ah | 18:00 |
@wiking | lemme see again | 18:00 |
@HeikoS | OXPHOS: looking at it now | 18:00 |
OXPHOS | wiking: https://docs.google.com/document/d/1eozTFX_mgKx3eXQfQnP07Rxi8GYKfGYdu_qvGpLRnjw/edit?usp=sharing | 18:00 |
lisitsyn | OXPHOS: please ping me anytime but I could be drunk and fail to respond | 18:00 |
lisitsyn | OXPHOS: have you seen my 'Some' class? | 18:01 |
OXPHOS | HeikoS: Thx! No rush. Just want to make sure I can get everything done on time. | 18:01 |
@HeikoS | OXPHOS: you are right | 18:01 |
@HeikoS | can you point me on something that we should start with discussing? | 18:01 |
@HeikoS | for linalg, lambday and wiking had a discussion | 18:01 |
OXPHOS | lisitsyn: Nope sorry. where is it? | 18:02 |
@HeikoS | we need some decisions there | 18:02 |
lisitsyn | OXPHOS: shogun/base/some.h IIRC | 18:02 |
@HeikoS | the design goals are: we want to be able to switch at runtime (not compile time), while we want to avoid too much overhead in the method calls | 18:02 |
OXPHOS | HeikoS: Yes I guess people have different ideas | 18:02 |
lisitsyn | tensorflow | 18:02 |
lisitsyn | :D | 18:03 |
@HeikoS | lisitsyn: noooo | 18:03 |
lisitsyn | YYY | 18:03 |
@wiking | TENSOOOOOOOOOOOOOOOORFLOOOOOOOOOOOOOOOOW | 18:03 |
@wiking | :D | 18:03 |
@wiking | floooooooooooow | 18:03 |
@wiking | man | 18:03 |
@wiking | i'm tired of deep neural nets | 18:03 |
@wiking | :) | 18:03 |
lisitsyn | seriously why not haha | 18:03 |
@wiking | lets do something else | 18:03 |
@HeikoS | because we can't | 18:03 |
@HeikoS | need python to use it | 18:03 |
@wiking | we cant what? | 18:03 |
lisitsyn | ?? | 18:03 |
@HeikoS | use tensorflow | 18:03 |
@wiking | they use swig | 18:03 |
lisitsyn | no | 18:03 |
lisitsyn | das ist not korrekt | 18:03 |
@wiking | its eigen + c++ | 18:03 |
lisitsyn | yesz | 18:03 |
@HeikoS | no | 18:03 |
@wiking | what no? | 18:03 |
lisitsyn | it is | 18:04 |
@HeikoS | cannot build computation graphs from C++ | 18:04 |
@HeikoS | only execute | 18:04 |
@HeikoS | so you have to build the graphs in python | 18:04 |
@HeikoS | export | 18:04 |
@HeikoS | then execute with c++ | 18:04 |
@wiking | eh shitfuckers | 18:04 |
@wiking | :) | 18:04 |
lisitsyn | https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core | 18:04 |
lisitsyn | really? | 18:04 |
@HeikoS | yes | 18:04 |
lisitsyn | but we don't need graphs | 18:04 |
@HeikoS | otherwise I would have done a project on that ;) | 18:04 |
lisitsyn | we need tensors | 18:04 |
@wiking | OXPHOS: so i added an idea | 18:04 |
@HeikoS | graphs as in computation description | 18:04 |
OXPHOS | lisitsyn: Lemme check. Wondering why other people can compile successfully. Thx! | 18:04 |
@wiking | anyhow | 18:04 |
@HeikoS | wiking: you still owe us this mail about the linalg design | 18:04 |
@wiking | fuck deep nets | 18:04 |
lisitsyn | DEEP NETS | 18:05 |
@wiking | HeikoS: i've replied | 18:05 |
@wiking | :) | 18:05 |
@HeikoS | ah really | 18:05 |
@wiking | yep | 18:05 |
@HeikoS | sorry didnt see yet | 18:05 |
@HeikoS | checking | 18:05 |
@wiking | but yeah i should explain that more afaik | 18:05 |
@wiking | *imo | 18:05 |
OXPHOS | wiking: thx. sorry I forgot to mention page 3-4 are new stuff | 18:05 |
@HeikoS | virtual functions llama? | 18:05 |
@wiking | HeikoS: yeah | 18:05 |
@wiking | OXPHOS: ok checking bassza meg | 18:06 |
@wiking | :) | 18:06 |
@HeikoS | wiking: ok read it | 18:06 |
@HeikoS | what do we do with OXPHOS? | 18:06 |
@HeikoS | in terms of linalg | 18:06 |
@HeikoS | wiking: I am just discussing with rahul here | 18:10 |
@HeikoS | so lets say linalg is a plugin | 18:10 |
@HeikoS | then signature need to use SGMatrix etc | 18:10 |
@HeikoS | OXPHOS: you follow as well? | 18:10 |
@HeikoS | lisitsyn: ^ | 18:10 |
-!- lambday [8028b10a@gateway/web/freenode/ip.128.40.177.10] has joined #shogun | 18:10 | |
-!- mode/#shogun [+o lambday] by ChanServ | 18:10 | |
@lambday | wiking: lisitsyn: yo! | 18:11 |
@HeikoS | but if this is the case, then how to we avoid that data is transferred to GPU in every call on viennaCL things | 18:11 |
@wiking | lambday: hola | 18:11 |
@wiking | HeikoS: w8 | 18:11 |
@HeikoS | sitting next to each other btw 8-) | 18:11 |
@wiking | i'm currently commending on the doc | 18:11 |
@wiking | *commenting | 18:11 |
@HeikoS | ah ok | 18:11 |
@wiking | gimme 5 more mins | 18:11 |
@HeikoS | cool sure | 18:11 |
@lambday | wiking: yeah me and Heiko were discussing about the interface that the linalg plugin shoudl provide! | 18:11 |
@HeikoS | OXPHOS: ok so linalg needs a bit discussion | 18:12 |
@HeikoS | OXPHOS: lets talk about serialization | 18:12 |
@HeikoS | while wiking comments | 18:12 |
OXPHOS | HeikoS: Sure | 18:12 |
@HeikoS | what we need for that is a working prototype to start with | 18:12 |
@HeikoS | you mentioned you had 2 ideas | 18:13 |
OXPHOS | HeikoS: Ah you mean the code | 18:13 |
@HeikoS | I mean we need something that cerealises an existing shogun class | 18:14 |
@HeikoS | OXPHOS: can you ellaborate a bit on your proposal? | 18:15 |
OXPHOS | HeikoS: Thought I'll start that when I'm reaching that part | 18:16 |
OXPHOS | So now the parameters need to be saved are added via SG_ADD | 18:16 |
@HeikoS | OXPHOS: I think it would be great to write a minimal example that is self contained | 18:16 |
@wiking | ok i think i'm done | 18:16 |
@wiking | OXPHOS: i second HeikoS idea | 18:17 |
@wiking | and the same should be done for shared_ptr | 18:17 |
@wiking | (see my commment in your doc) | 18:17 |
@HeikoS | OXPHOS: it doesnt need to be embedded into shogun fore now | 18:17 |
@wiking | ++ | 18:17 |
@HeikoS | but illustrate the technical problems and how then can be solved | 18:18 |
@HeikoS | so create a fake shogun class | 18:18 |
@HeikoS | and code that uses cereal | 18:18 |
@HeikoS | really important to do this stuff relatively early | 18:18 |
@wiking | arianepaola: we have a possible starter for pipy... do you want to further work on that for the time being? | 18:18 |
@wiking | it should be straight forward to fix and finish it | 18:18 |
OXPHOS | HeikoS, wiking: so like an independent test case, but looks like a shogun one? | 18:19 |
@HeikoS | OXPHOS: exactly | 18:19 |
@wiking | yep yep | 18:19 |
OXPHOS | okay got it | 18:19 |
@wiking | should be really striaghtforward | 18:19 |
OXPHOS | yes | 18:19 |
@wiking | and the hdf5 thing i would really leave it | 18:20 |
@wiking | when you have time | 18:20 |
@wiking | and forget asccii output | 18:20 |
@wiking | so the default cereal output formats | 18:20 |
OXPHOS | haha okay. This would make thins easier | 18:20 |
@wiking | are good... and if you have remaining time you can do those | 18:20 |
OXPHOS | *things | 18:20 |
@wiking | yep yep | 18:20 |
@wiking | it's just better to have the whole serialization working | 18:21 |
@wiking | with cereal | 18:21 |
@HeikoS | wiking: so about the linalg | 18:21 |
OXPHOS | sure | 18:21 |
@HeikoS | so lets say it is a plugin | 18:21 |
@HeikoS | and all the methods take SG* as input | 18:21 |
@HeikoS | good? | 18:21 |
@wiking | yep | 18:21 |
@HeikoS | ok then we have a few cases | 18:22 |
@HeikoS | 1.) all is CPU, that is easy as it is as things are now | 18:22 |
@HeikoS | 2.) I explicitly want to run a linalg operation on GPU | 18:22 |
@HeikoS | how would that work? | 18:22 |
@wiking | ok so if you want to have gpu linalg | 18:22 |
@HeikoS | we can create a GPUMatrix in Shogun code, and then wrap a SGMatrix around it, and pass it to linalg | 18:22 |
@wiking | you set your new linalg backend | 18:23 |
@HeikoS | or does every call to gpu linalg transfer data? | 18:23 |
@wiking | (a plugin) | 18:23 |
@HeikoS | I see | 18:23 |
@wiking | that'll load all the shit in | 18:23 |
@HeikoS | when does the data transfer happen? | 18:23 |
@HeikoS | in every call? | 18:23 |
@wiking | nono | 18:23 |
@wiking | you transfer it once | 18:23 |
@HeikoS | ok | 18:23 |
@wiking | why would you transfer it back an forth | 18:23 |
@HeikoS | so there is like a method for that? | 18:23 |
@HeikoS | agreed, .... how does it look like | 18:24 |
@HeikoS | since the method iterface is SGMatrix | 18:24 |
@wiking | you can have a static code for that | 18:24 |
@wiking | transfer to gpu | 18:24 |
@wiking | transfer to cpu | 18:24 |
@wiking | that function returns you an object | 18:24 |
@wiking | that has reference on the data | 18:24 |
@HeikoS | say we have big matrix | 18:24 |
@wiking | in question | 18:24 |
@wiking | i mean if you know that you wanna use a gpu | 18:25 |
@wiking | then you would get that to gpu as soon as possible | 18:25 |
@wiking | (possibly when you load in the data) | 18:25 |
@wiking | but if that's not possible | 18:25 |
@wiking | you'll have to do it at some point | 18:25 |
@HeikoS | so what if no GPU is available | 18:25 |
@HeikoS | and therefore the plugin | 18:25 |
@HeikoS | what happens? | 18:25 |
@wiking | you can have the plugin | 18:26 |
@HeikoS | inside shogun code | 18:26 |
@wiking | but when you load in the plugin | 18:26 |
@wiking | you should have an assert/warning | 18:26 |
@wiking | whatever | 18:26 |
@HeikoS | ok so runtime error | 18:26 |
@wiking | that it cannot be used | 18:26 |
@HeikoS | no fallback | 18:26 |
@wiking | and then you can fallback | 18:26 |
@wiking | why cant you | 18:26 |
@HeikoS | ok if we do a fallback | 18:26 |
@wiking | i mean say you have a linalg interface | 18:26 |
@wiking | that will have a default value | 18:26 |
@wiking | right | 18:26 |
@HeikoS | then I am confused how the signatures would look like | 18:26 |
@wiking | so i would say that our default linalg backend is | 18:27 |
@wiking | eigen based | 18:27 |
@wiking | but that's still a plugin | 18:27 |
@wiking | but a plugin that is required | 18:27 |
@HeikoS | Isnt this very similar to the existing proposal? | 18:27 |
@HeikoS | just that it is a plugin | 18:27 |
@wiking | which proposal? | 18:27 |
@wiking | i mean there was a proposal | 18:27 |
@wiking | that a) compile 2 different shoguns | 18:28 |
@wiking | b) transfer data between cpu-gpu all the time | 18:28 |
@wiking | :) | 18:28 |
@HeikoS | no we dont want both of that | 18:28 |
@wiking | i mean i dont see any of these being what i'm talking about | 18:28 |
@wiking | i know | 18:28 |
@wiking | they are xor | 18:28 |
@wiking | anyhow | 18:28 |
@wiking | so you have a backend registered | 18:28 |
@HeikoS | rahul asks what the base class is for both of the matrix classes | 18:28 |
@HeikoS | for the runtime fallback | 18:29 |
@wiking | what do you mean by runtime fallback for matrix clas? | 18:29 |
@HeikoS | because the static methods take GPUMatrix | 18:29 |
@HeikoS | so if no GPU is available | 18:29 |
@HeikoS | you said we do fallback to the eigen3 linalg | 18:29 |
@wiking | you wont be able to get GPUMatrix | 18:29 |
@wiking | right? | 18:29 |
@HeikoS | exactly | 18:29 |
@wiking | how do you get a GPUMatrix object | 18:29 |
@wiking | if you dont have a GPUMatrix | 18:29 |
@wiking | i mean | 18:29 |
@HeikoS | so the code does not run then? | 18:29 |
@wiking | GPU matrix | 18:29 |
@HeikoS | that is, the GPU implementations will not work if there is not GPU? | 18:30 |
@HeikoS | no fallback to CPU? | 18:30 |
@wiking | it could | 18:30 |
@HeikoS | mmh | 18:30 |
@HeikoS | how? | 18:30 |
@wiking | you can still have | 18:30 |
@wiking | the reference to be a noop | 18:30 |
@wiking | right? | 18:30 |
@wiking | *NOP | 18:30 |
@HeikoS | not sure I understand | 18:31 |
@wiking | i mean say you have a | 18:31 |
@wiking | SGMatrix | 18:31 |
@wiking | and say you have an implementation of a special algo X | 18:31 |
@wiking | and that algo x is written in | 18:31 |
@wiking | using GPU code | 18:31 |
@wiking | right? | 18:31 |
@HeikoS | ok | 18:31 |
@wiking | so you'll have a transfer function | 18:31 |
@wiking | of the SGMatrix -> GPUMatrix | 18:31 |
@wiking | right? | 18:31 |
@HeikoS | ok | 18:32 |
@HeikoS | that is static | 18:32 |
@wiking | whatever | 18:32 |
@HeikoS | kk | 18:32 |
@wiking | somebody will do it for you | 18:32 |
@wiking | somehow | 18:32 |
@wiking | it just represents that the data is on the gpu end | 18:32 |
@wiking | *memory | 18:32 |
@wiking | if you have a GPU that will actually do the transfer | 18:32 |
@wiking | but if you dont why cannot that be a NOP? | 18:33 |
@wiking | it's a bit ugly | 18:33 |
@wiking | but will work | 18:33 |
@HeikoS | so that means: runtime error? | 18:33 |
@wiking | no | 18:33 |
@wiking | it's a no operation | 18:33 |
@wiking | you dont do anything with the matrix | 18:33 |
@wiking | no transfer | 18:33 |
@HeikoS | so it just ignores | 18:34 |
@wiking | just wrap it into GPUMatrix | 18:34 |
@HeikoS | the call | 18:34 |
@wiking | and you can continue with the whole thing | 18:34 |
@HeikoS | so the GPU matrix is still CPU matrix on the computer | 18:34 |
@wiking | gpumatrix's data will still reside on the cpu | 18:34 |
@HeikoS | I get it now | 18:34 |
@HeikoS | I see now | 18:35 |
@wiking | only shitty part is | 18:35 |
@HeikoS | so this means we have to heavily modify GPUMatrix | 18:35 |
@HeikoS | but ok | 18:35 |
@wiking | i mean | 18:35 |
@wiking | we could i believe | 18:35 |
@wiking | maaaybe | 18:35 |
@wiking | learn some or more | 18:35 |
@wiking | from magma | 18:35 |
@wiking | i hope they have a nicer way to do this | 18:35 |
@wiking | never really checked the code | 18:35 |
@HeikoS | wiking: I think this NOP thing is ok | 18:35 |
@wiking | but who knows | 18:35 |
@wiking | it's ugly a bit | 18:36 |
@HeikoS | wiking: I mean in reality | 18:36 |
@HeikoS | GPU algorithms will be slow as f*** on CPU | 18:36 |
OXPHOS | Naive idea: cmake detects whether GPU is available/GPU is enabled and generate a FLAG? | 18:36 |
@HeikoS | and one needs alternative implementation if one wants to change back and forth | 18:36 |
@wiking | in former times opencv had the similar way | 18:36 |
OXPHOS | Then do everything in GPU if FLAG=true? | 18:36 |
@wiking | dunno if they have now a better way to do this | 18:36 |
@HeikoS | OXPHOS: yes something like this | 18:37 |
@HeikoS | wiking, OXPHOS, lambday so let me summarise | 18:37 |
@HeikoS | 1.) linalg will become a plugin (not part of OXPHOS work for now, but sanuj) | 18:37 |
@HeikoS | 2.) all methods will be virtual and use SGMatrix SGVector in signatures | 18:37 |
@wiking | huh fuck | 18:38 |
@wiking | opencv's interface is really shit | 18:38 |
@wiking | :) | 18:38 |
@wiking | it got worse than it was | 18:38 |
@wiking | 2) actually no virtual | 18:38 |
@wiking | :))) | 18:38 |
@HeikoS | 3.) there will be some kind of factory which one can ask to transfer data back and forth to GPU that takes and returns GPUMAtrix type | 18:38 |
@wiking | you can actually avoid using virtual | 18:38 |
@wiking | and when you register the backend | 18:38 |
@wiking | you register your function pointers | 18:38 |
@HeikoS | 3.) ok no virtual, just overloaded | 18:38 |
@HeikoS | ah I see | 18:39 |
@HeikoS | ok | 18:39 |
@wiking | so this way you can avoid the virtual function overhead | 18:39 |
@wiking | and btw | 18:39 |
@HeikoS | 4.) transfer to GPU is an empty function in case the gpu linalg is not available | 18:39 |
@wiking | we should really do something about Features->dot ;) | 18:39 |
@HeikoS | wiking: yep :) | 18:39 |
@HeikoS | and we should profile cache misses in shogun | 18:39 |
@HeikoS | but OK | 18:39 |
@HeikoS | OXPHOS: | 18:39 |
@HeikoS | that is your summary for linalg | 18:39 |
@wiking | HeikoS: yeah i did some changes for false cache stuff | 18:39 |
@HeikoS | a prototype would be nice here as well | 18:39 |
@HeikoS | since it helps for facilitationg these discussions | 18:40 |
@HeikoS | wiking: cool | 18:40 |
OXPHOS | got it. | 18:40 |
@HeikoS | wiking: we had some 8x factor speedups in MMD tests here via doing this properly | 18:40 |
@HeikoS | OXPHOS: same here, make a minimal standalone prototype | 18:40 |
@HeikoS | that has all important things we mentioned | 18:40 |
@HeikoS | and that compiles/runs | 18:40 |
@HeikoS | just need to put a single operation | 18:40 |
@wiking | HeikoS: you mean that you dont use virtual functions everywhere ;P | 18:41 |
@HeikoS | wiking: nono, sweeping through data sequentially | 18:41 |
@wiking | ah yeah | 18:41 |
@HeikoS | wiking: BTW, this way of linalg doesnt requires it to be a plugin | 18:41 |
@wiking | pipeline cache | 18:41 |
@HeikoS | it could be part of base | 18:41 |
@HeikoS | but not sure what we do there | 18:41 |
@wiking | you mean the interface? | 18:41 |
@wiking | i mean Linalg | 18:42 |
@wiking | should be there in base | 18:42 |
@wiking | but it's just the class | 18:42 |
@wiking | where you can register | 18:42 |
@wiking | the actual linalg backend | 18:42 |
@wiking | etc | 18:42 |
@HeikoS | wiking: another question | 18:42 |
@HeikoS | so you do the transfer call to GPU, and you get a GPUMatrix | 18:43 |
@HeikoS | no matter whether it happened or not, but you get the type | 18:43 |
@HeikoS | then you want to call linalg method | 18:43 |
@HeikoS | and then linalg methods are overloaded for both CPU/GPUMatrix? | 18:43 |
@HeikoS | so compile time determined? | 18:43 |
@wiking | that's why i said it's a bit ugly | 18:44 |
@HeikoS | but then what about this thing: | 18:44 |
@HeikoS | I have no GPU | 18:44 |
@HeikoS | I do the transfer call | 18:44 |
@HeikoS | I get GPUMatrix that lives in main memory | 18:44 |
@HeikoS | I pass it to linalg::dot( ... ) | 18:44 |
@HeikoS | what happens inside there? | 18:44 |
@HeikoS | it fails? | 18:45 |
@wiking | nono | 18:45 |
@wiking | it should never fail | 18:45 |
@wiking | it should seemless do the operation | 18:45 |
@HeikoS | but if the type is static | 18:45 |
@wiking | :) | 18:45 |
@HeikoS | how would the fallback work? | 18:45 |
@HeikoS | since I definitely pass GPUMAtrix | 18:45 |
@wiking | i mena here is the shit part | 18:45 |
@wiking | there are couple of way around | 18:45 |
@HeikoS | the plugin falls back inside? | 18:45 |
@HeikoS | as in | 18:45 |
@wiking | if you know your backend doesn't support | 18:45 |
@wiking | GPUMatrix | 18:46 |
@wiking | you can do a transfer back | 18:46 |
@wiking | to SGMatrix | 18:46 |
@HeikoS | if (GPUMatrix.is_cpu) { cpu_linalg::fot( ))) | 18:46 |
@HeikoS | inside linalg::dot() ? | 18:46 |
@wiking | which in case that was a GPUMatrix where data is in main memory | 18:46 |
@wiking | again a noop | 18:46 |
@wiking | *nop | 18:46 |
@HeikoS | where does this happen? | 18:46 |
@HeikoS | inside the gpu linalg method? | 18:46 |
@wiking | you dont have gpu or cpu linalg method | 18:47 |
@wiking | you just have linalg:dot | 18:47 |
@HeikoS | so the interface then is? | 18:47 |
@HeikoS | GPUMatrix m | 18:47 |
@wiking | and now i'm thinking | 18:47 |
@HeikoS | transfer_to_gpu(m) | 18:47 |
@wiking | do we really need | 18:47 |
@wiking | the distinguishing part | 18:47 |
@HeikoS | this is weird | 18:47 |
@wiking | of CPU/GPU | 18:47 |
@HeikoS | wait | 18:47 |
@HeikoS | let me first understand this | 18:48 |
@wiking | i mean it will work | 18:48 |
@wiking | but too much unnecessary wrapping | 18:48 |
@HeikoS | argh | 18:48 |
@HeikoS | firealarm | 18:48 |
@wiking | that's why i'm pivoting the idea | 18:48 |
@wiking | :))))))))))) | 18:48 |
@HeikoS | haha | 18:48 |
@wiking | exam period? | 18:48 |
@HeikoS | ah its turned off again | 18:48 |
@HeikoS | test | 18:48 |
@HeikoS | hahahaha | 18:48 |
@wiking | so the thing is that you can do these transfer back and forth | 18:48 |
@wiking | that is a nop | 18:48 |
@HeikoS | so when is the conversion of GPUMatrix->SGMatrix happening? | 18:48 |
@wiking | but then it's a bit of an overhead | 18:48 |
@HeikoS | before I call linalg::foo? | 18:49 |
@wiking | if the GPUMatrix was actually | 18:49 |
@wiking | represented in main memory? | 18:49 |
@wiking | it's a nop right? | 18:49 |
@HeikoS | yes | 18:49 |
@wiking | and you do that in the call | 18:49 |
@HeikoS | but the type I get is GPUMatrix | 18:49 |
@wiking | say it's a dot product | 18:49 |
@HeikoS | but linalg::foo needs SGMatrix | 18:49 |
@wiking | you are now talking about the actual implementaiton | 18:49 |
@wiking | not the interface you'd be calling right? | 18:49 |
@HeikoS | no just kind of the API | 18:50 |
@HeikoS | and what is happening | 18:50 |
@wiking | yeah but fuck | 18:50 |
@HeikoS | on high level | 18:50 |
@wiking | linalg::foo(SGMatrix) | 18:50 |
@wiking | linalg::foo(GPUMatrix) | 18:50 |
@wiking | right? | 18:50 |
@HeikoS | ok | 18:50 |
@wiking | and depending on your backend | 18:50 |
@wiking | one or the other is supported | 18:50 |
@wiking | or? | 18:50 |
@wiking | i mean what do you do | 18:50 |
@wiking | when you call | 18:50 |
@HeikoS | what happens in linalg::foo(GPUMatrix) if the transfer was nop? | 18:50 |
@wiking | linalg::foo(SGMatrix) | 18:50 |
@wiking | on a GPU linalg backend? | 18:50 |
@HeikoS | sure | 18:50 |
@wiking | will you do the transfer of SGMatrix -> GPUMatrix | 18:51 |
@wiking | do the foo(GPUMatrix) | 18:51 |
@wiking | then do the GPUMatrix -> SGMatrix and return? | 18:51 |
@wiking | from linalg::foo(GPUMatrix) | 18:51 |
@wiking | ? | 18:51 |
@wiking | i mean in some way it's the same problem | 18:51 |
@HeikoS | nono I was just confused | 18:51 |
@wiking | no what i mean now | 18:52 |
@HeikoS | but my question still is what how the fallback works | 18:52 |
@wiking | what do you do in this case really? | 18:52 |
@wiking | yeah but fuck | 18:52 |
@wiking | it's the same problem | 18:52 |
@HeikoS | when linalg::foo(GPUMatrix) is called | 18:52 |
@wiking | ok so you have a linalg::foo(GPUMatrix) | 18:52 |
@wiking | and you backend is actually cpu | 18:52 |
@wiking | then you will do a NOP GPUMatrix -> SGMatrix | 18:52 |
@wiking | call linalg::foo(SGMatrix) | 18:53 |
@HeikoS | inside the foo method? | 18:53 |
@wiking | yes | 18:53 |
@wiking | as you can see this is the same problem | 18:53 |
@wiking | as i've mentioned about | 18:53 |
@wiking | GPU backend getting SGMatrix | 18:53 |
@wiking | and there | 18:53 |
@wiking | the bigger question is | 18:53 |
@wiking | what is your backend | 18:53 |
@wiking | and how do you have a reference on that? | 18:53 |
@HeikoS | mmh this fallback inside each method of linalg seems a bit strange to me | 18:54 |
@wiking | ok so lets take the other problem | 18:54 |
@wiking | the one above | 18:54 |
@wiking | GPU backend | 18:54 |
@wiking | and you have a GPU | 18:54 |
@wiking | and you regitered the linalg backend to be GPU | 18:54 |
@wiking | did you imagine to runtimeexception | 18:54 |
@wiking | when you call linalg::foo(SGMatrix) | 18:55 |
@wiking | ? | 18:55 |
@HeikoS | no | 18:55 |
@HeikoS | that should work | 18:55 |
@HeikoS | as I dont want everything to be GPU | 18:55 |
@HeikoS | right? | 18:55 |
@wiking | yeah | 18:55 |
@HeikoS | what if the transfer_to_gpu actually returned SGMatrix if GPU was not available, and then we use auto as type as pass it to linalg::foo, which then gets linalg::foo(SGMatrix) | 18:55 |
@wiking | but how will it work? | 18:55 |
@wiking | i mean you'v just regitered your linalg backend to be GPU | 18:55 |
@wiking | how will then your SGMatrix linalg method still work? | 18:56 |
@wiking | which bakcend will you use? | 18:56 |
@HeikoS | I see | 18:56 |
@HeikoS | no only selected calls should be GPIU | 18:56 |
@wiking | so you say | 18:56 |
@wiking | linalg is ALWAYS cpu | 18:56 |
@wiking | and then you can choose some functions to be working | 18:56 |
@wiking | as gpu | 18:56 |
@wiking | if you register them? | 18:56 |
@wiking | otherwise you expect that to still work | 18:57 |
@HeikoS | yes I think so | 18:57 |
@wiking | with cpu? | 18:57 |
@HeikoS | yes if GPU is not available | 18:57 |
@wiking | ok cool | 18:57 |
@wiking | then i would just stop | 18:57 |
@wiking | having gpumatrix | 18:57 |
@wiking | :) | 18:57 |
@HeikoS | and do everything inside SGMatrix | 18:57 |
@wiking | yes | 18:57 |
@wiking | and then do the transfer | 18:57 |
@wiking | by hand in the algo | 18:58 |
@wiking | if there's gpu backend | 18:58 |
@HeikoS | yes | 18:58 |
@wiking | and then you call the fucking thind | 18:58 |
@HeikoS | since the transfer is expensive | 18:58 |
@HeikoS | we want to be explicit | 18:58 |
@wiking | and then it'll work either with the gpu | 18:58 |
@wiking | backed one | 18:58 |
@wiking | or just the simple one | 18:58 |
@HeikoS | yes | 18:58 |
@wiking | if no gpu | 18:58 |
@wiking | i think this is cleaner | 18:58 |
@wiking | because then you dont need | 18:59 |
@wiking | linalg::foo(SGMatrix) | 18:59 |
@wiking | linalg::foo(GPUMatrix) | 18:59 |
@wiking | just linalg::foo(SGMatrix) | 18:59 |
@wiking | and you can have like SGMatrix.onGPU() | 18:59 |
@wiking | and if it's on gpu then you call the gpu backend | 18:59 |
@wiking | otherwise fallback | 18:59 |
@HeikoS | yes | 18:59 |
@wiking | good? | 19:00 |
OXPHOS | : ) | 19:00 |
@HeikoS | so we dont have two plugins | 19:00 |
@HeikoS | so if I call linalg::foo(SGMatrix) | 19:01 |
@wiking | no you still have a plugin | 19:01 |
@HeikoS | inside that method, it check SGMatrix::onGPU() | 19:01 |
@wiking | GPU plugin | 19:01 |
@wiking | i mean that you register | 19:01 |
@HeikoS | and then calls the corresponding thing | 19:01 |
@wiking | i mean that's a plugin | 19:01 |
@wiking | you can have it available | 19:01 |
@HeikoS | yeah ok | 19:01 |
@HeikoS | so still plugins | 19:02 |
@wiking | yeah yeah | 19:02 |
@wiking | dont want to statically compile it | 19:02 |
@wiking | but yeah | 19:02 |
@wiking | you make it sure that its regitered | 19:02 |
@wiking | and say | 19:02 |
@wiking | if you have | 19:02 |
@wiking | linalg::foo(SGMatrix) | 19:02 |
@wiking | where SGMatrix::onGPU() = True | 19:02 |
@wiking | but you didn't register a GPU backend | 19:02 |
@wiking | then you throw a big motherfucking runtime exception | 19:02 |
@wiking | to the user | 19:02 |
@HeikoS | haha | 19:02 |
@wiking | that he is an idiot | 19:02 |
@wiking | :) | 19:02 |
@HeikoS | ok agreed :D | 19:02 |
@wiking | because he transferred the data to gpu | 19:03 |
@wiking | but not registered the gpu backend for the linalg | 19:03 |
@HeikoS | what exactly means registiering the gpu backend? | 19:03 |
@wiking | well you say to the linalg 'interface' | 19:03 |
@wiking | linalg::register_backend(LinalgImplementation) | 19:04 |
@wiking | i mean the thing is here | 19:04 |
@HeikoS | and this happens in the algorithms | 19:04 |
@wiking | or whenever | 19:04 |
@wiking | user can override this | 19:04 |
@wiking | at any point of time | 19:04 |
@wiking | i mean | 19:04 |
@wiking | the idea is here | 19:04 |
@wiking | that we can have | 19:04 |
@wiking | N different CPU linalg backends | 19:05 |
@wiking | and K different GPU linalg backends | 19:05 |
@wiking | right? | 19:05 |
@HeikoS | yes | 19:05 |
@wiking | so actually | 19:05 |
@wiking | i would have in linalg | 19:05 |
@wiking | a function | 19:05 |
@wiking | linalg::transfer_to_gpu(SGMatrix) | 19:05 |
@wiking | and then it'll use the registered GPU backend | 19:05 |
@wiking | and if no backend is available | 19:05 |
@HeikoS | ok but by "user" you mean shogun developer that writes algo? | 19:05 |
@wiking | i.e. not registered | 19:05 |
@HeikoS | or actualy user? | 19:06 |
@wiking | well that's the thing | 19:06 |
@wiking | you dont want to anchor the actual GPU backend | 19:06 |
@wiking | or? | 19:06 |
@HeikoS | no | 19:06 |
@HeikoS | definitely | 19:06 |
@wiking | i mean you just want that the algo using gpu | 19:06 |
@HeikoS | we want to be able to change | 19:06 |
@wiking | if possible | 19:06 |
@HeikoS | yeah | 19:06 |
@wiking | but you dont really care | 19:06 |
@wiking | if it's cuda or something else | 19:06 |
@wiking | or? | 19:06 |
@HeikoS | so inside algorithm, we just assert that fact THAT there is GPU, not WHICH backend | 19:06 |
@wiking | yep | 19:06 |
@wiking | because it should be the user's decision | 19:07 |
@HeikoS | about the runtime error | 19:07 |
@HeikoS | user doesnt register GPU backend | 19:07 |
@wiking | which actual implementation of linalg he wanna use | 19:07 |
@HeikoS | but calls algo which contains a transfer | 19:07 |
@HeikoS | should still work right? | 19:07 |
@wiking | yyeah | 19:07 |
@wiking | it's a NOP | 19:07 |
@wiking | you can warning it | 19:07 |
@wiking | so that the user knows | 19:07 |
@wiking | that it's gonna be shit | 19:07 |
@HeikoS | yeah | 19:07 |
@wiking | because he didn't register a GPU backend | 19:07 |
@HeikoS | yeah | 19:08 |
@wiking | its either intentional | 19:08 |
@wiking | or by mistake | 19:08 |
@wiking | user will decide | 19:08 |
@HeikoS | ok cool | 19:08 |
@HeikoS | I am happy with this | 19:08 |
@wiking | btw | 19:08 |
@wiking | the soon we'll have to have | 19:08 |
@HeikoS | OXPHOS: overwhelmed? ;) | 19:08 |
@wiking | shogun.config file | 19:08 |
@HeikoS | OXPHOS: make sure you ask questions | 19:08 |
@HeikoS | since you will be the person drafting this | 19:08 |
@HeikoS | IRC_log -> C++ prototype -> shogun code | 19:09 |
@wiking | sanuj ^ when you read the irc logs | 19:09 |
OXPHOS | HeikoS: I'll take some time to digest :P | 19:09 |
@wiking | maybe with the whole plugins thing | 19:09 |
@wiking | we'll need to add a support for shogun config | 19:09 |
@wiking | because | 19:09 |
@HeikoS | OXPHOS: one thing is that most of the design doesnt depend on linalg being a plugin yet | 19:09 |
@wiking | a) where are the .so-s residing | 19:09 |
@HeikoS | OXPHOS: the transfer calls, the method signatures the unit tests etc etc | 19:09 |
@wiking | b) which linalg backend you wanna use | 19:09 |
@wiking | HeikoS: ^ what do you say | 19:09 |
@wiking | ? | 19:09 |
@HeikoS | wiking: yeah | 19:09 |
@HeikoS | I think that is good | 19:10 |
@wiking | i think this should be config file | 19:10 |
@wiking | or seomthing | 19:10 |
@HeikoS | yeah definitely | 19:10 |
@HeikoS | good for experiments | 19:10 |
@wiking | because the parameters will grow very rapidly | 19:10 |
@HeikoS | we can actually use that to replace these horrible HMM_USE_SHORT_REAL | 19:10 |
@wiking | i mean a simple key=value file is good | 19:10 |
@wiking | yeah indeed | 19:10 |
@HeikoS | USE_BENCHMARK_KMEANS_XYZ_IMPL | 19:10 |
@HeikoS | yep | 19:10 |
@HeikoS | wiking: I know | 19:10 |
@HeikoS | we can use a | 19:10 |
@HeikoS | Python dictionary | 19:10 |
@HeikoS | hahah ;D | 19:10 |
@wiking | :DDDDDDDDDDDD | 19:10 |
@wiking | json? :D | 19:11 |
@HeikoS | yeah or just text | 19:11 |
@HeikoS | whatever | 19:11 |
@HeikoS | good idea | 19:11 |
@HeikoS | OXPHOS: btw as for priorities | 19:11 |
@HeikoS | OXPHOS: can you write this down in a summary? | 19:11 |
@HeikoS | in your doc | 19:11 |
OXPHOS | HeikoS: doens't really know how plugin makes a difference yet :( ... will look up | 19:11 |
@HeikoS | design goals, API details | 19:11 |
OXPHOS | HeikoS: sure | 19:11 |
@wiking | HeikoS: you are using her as a secretary? :) | 19:11 |
@HeikoS | well it is her project | 19:12 |
@wiking | hehehe and sanuj's | 19:12 |
@wiking | :> | 19:12 |
OXPHOS | XD | 19:12 |
@HeikoS | wiking: thanks for discussion btw, super helpful | 19:15 |
@wiking | no worries | 19:15 |
@lambday | wiking: that really helped a lot | 19:15 |
@wiking | :) | 19:15 |
@HeikoS | OXPHOS: about the cereal stuff, I think we can only really discuss this once there is a prototype | 19:15 |
@wiking | ++ | 19:15 |
@lambday | gottta run for now.. see you! | 19:15 |
-!- lambday [8028b10a@gateway/web/freenode/ip.128.40.177.10] has quit [Quit: leaving.] | 19:15 | |
@HeikoS | please let us know if there are any problems creating this | 19:15 |
@HeikoS | Saurabh7: you are still around? | 19:16 |
@wiking | OXPHOS: if you have a problem with cereal let me know i can help | 19:16 |
@wiking | and with the docs | 19:16 |
@wiking | just put anything into your gdocs | 19:16 |
@wiking | ping me | 19:16 |
@wiking | and then we can review | 19:16 |
@wiking | it really doesn't matter if it's not perfectly clear | 19:16 |
@wiking | jsut lets ahve something that we can later modify etc | 19:16 |
@HeikoS | Saurabh7: please use callgrind to profile benchmarks you write -- in particular for the cache miss | 19:16 |
@wiking | prof | 19:17 |
@wiking | :) | 19:17 |
@wiking | best profiler | 19:17 |
@wiking | :> | 19:17 |
@HeikoS | Saurabh7: I have this idea of systematically checking all the algorithms you touch, and producing a report for the end | 19:17 |
@HeikoS | or prof ^:) | 19:17 |
@wiking | mmm but | 19:17 |
@wiking | we should actually | 19:17 |
@wiking | buildbot this | 19:17 |
@HeikoS | we should really be aware | 19:17 |
@HeikoS | wiking: good point | 19:17 |
@wiking | (systematically checking algos) | 19:17 |
@wiking | i mean i'm now w8ing on amazon | 19:18 |
@HeikoS | and creating historam | 19:18 |
@HeikoS | haha | 19:18 |
@wiking | as then i'm moving all the builds | 19:18 |
@HeikoS | yeah | 19:18 |
@HeikoS | :) | 19:18 |
@wiking | to aws | 19:18 |
@HeikoS | profiler can be on aws right? | 19:18 |
@wiking | and use our current machines | 19:18 |
@wiking | nono | 19:18 |
@wiking | it's not reliable | 19:18 |
@wiking | but we have our own machines | 19:18 |
@HeikoS | for like l2 cache miss? | 19:18 |
@wiking | we can do those there | 19:18 |
@wiking | nono aws is a shit | 19:18 |
@wiking | it's VPS | 19:18 |
OXPHOS | Sure thank you guys | 19:18 |
@wiking | so the actual IO and CPU performance | 19:18 |
@wiking | pretty much depends | 19:18 |
OXPHOS | So far cereal doesn't seem to be big issue | 19:18 |
@wiking | on the host machine's load | 19:19 |
@wiking | so doing benchmarks on aws is really not a good idea | 19:19 |
@wiking | as it's not consistent | 19:19 |
@wiking | rcurtin and mlpack is not using aws for the same reason for benchmarking | 19:19 |
@wiking | but once we have the aws credits | 19:19 |
@wiking | we can move every test build there | 19:20 |
@wiking | and use the barebone machines | 19:20 |
@wiking | for benhcmarking | 19:20 |
@HeikoS | ok | 19:20 |
@HeikoS | yeah I see | 19:20 |
@HeikoS | get it | 19:20 |
@HeikoS | wiking: man I am really amazed by this cache miss/git thing | 19:20 |
@HeikoS | such a big difference | 19:20 |
@HeikoS | between c++ impementations | 19:20 |
@HeikoS | I mean factor 8 -- come on | 19:20 |
@HeikoS | of my 2012 gsoc project to what we hav enow | 19:21 |
@HeikoS | and thats not even multicore | 19:21 |
@wiking | HeikoS: what actually did you there? | 19:32 |
@wiking | random accessed the CFeatures? | 19:32 |
@HeikoS | yes kernel matrix | 19:32 |
@HeikoS | based on block wise sums | 19:32 |
@HeikoS | of a big matrix | 19:32 |
@HeikoS | that is permuted | 19:33 |
@wiking | ah | 19:33 |
@wiking | i see | 19:33 |
@HeikoS | so just changing from reading sequentially over permutation vector to sequentially over data helped a lot | 19:33 |
@HeikoS | then some other things | 19:33 |
@HeikoS | that depend on algo | 19:33 |
@wiking | ah btw | 19:34 |
@wiking | WHO WILL | 19:34 |
@wiking | do as part of gsoc | 19:34 |
@wiking | the subset of CFeatures | 19:35 |
@wiking | :> | 19:35 |
@wiking | threadsafe | 19:35 |
@wiking | and i really want that on the end of this gsoc | 19:36 |
@HeikoS | haha | 19:38 |
@HeikoS | Saurabh7: ^ | 19:38 |
@HeikoS | add that to your listr | 19:38 |
@HeikoS | for your bagging machine right? | 19:38 |
@wiking | anything | 19:38 |
@wiking | i mean it would be nice to have a thread-safe view on a cfeatures | 19:39 |
@wiking | :) | 19:39 |
@HeikoS | wiking: actually | 19:39 |
@HeikoS | Saurabh7: already brought that up | 19:39 |
@HeikoS | what would be cool | 19:39 |
@HeikoS | would be a general view | 19:39 |
@HeikoS | on matrices and vectors | 19:39 |
@HeikoS | not just features | 19:39 |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has joined #shogun | 19:39 | |
@HeikoS | that also includes dimensions | 19:39 |
@HeikoS | like numpy array | 19:40 |
@wiking | yeah yeah | 19:41 |
@wiking | i mean i dont care how it is solved :) | 19:42 |
@wiking | and how abstract it is | 19:42 |
@wiking | jsut that we have this fixed | 19:42 |
@HeikoS | kk | 19:44 |
@HeikoS | also needed for parallel xvalidation | 19:44 |
@HeikoS | Saurabh7: that is another one for your project | 19:44 |
-!- besser82_ [~besser82@fedora/besser82] has quit [Remote host closed the connection] | 19:51 | |
-!- besser82 [~besser82@fedora/besser82] has joined #shogun | 19:52 | |
-!- mode/#shogun [+o besser82] by ChanServ | 19:52 | |
-!- sanuj [0e8bc402@gateway/web/freenode/ip.14.139.196.2] has quit [Ping timeout: 250 seconds] | 20:40 | |
arianepaola | wiking: sure | 21:22 |
-!- HeikoS [~heiko@nat-240-186.internal.eduroam.ucl.ac.uk] has quit [Ping timeout: 252 seconds] | 21:52 | |
-!- besser82 [~besser82@fedora/besser82] has quit [Ping timeout: 260 seconds] | 21:55 | |
-!- ptizoom [~christian@host-92-3-89-217.as43234.net] has quit [Ping timeout: 250 seconds] | 22:31 | |
-!- mizari [~mizari@95-174-213-100.nts.su] has quit [Ping timeout: 276 seconds] | 22:42 | |
-!- OXPHOS [8ca3fe9e@gateway/web/freenode/ip.140.163.254.158] has quit [Quit: Page closed] | 22:44 | |
-!- ptizoom [~christian@host-92-21-210-16.as13285.net] has joined #shogun | 22:45 | |
-!- ptizoom [~christian@host-92-21-210-16.as13285.net] has quit [Ping timeout: 250 seconds] | 22:51 | |
-!- ptizoom [~christian@host-92-21-199-6.as13285.net] has joined #shogun | 23:03 | |
-!- ptizoom [~christian@host-92-21-199-6.as13285.net] has quit [Ping timeout: 244 seconds] | 23:10 | |
-!- ptizoom [~christian@host-92-21-201-105.as13285.net] has joined #shogun | 23:24 | |
-!- ptizoom [~christian@host-92-21-201-105.as13285.net] has quit [Ping timeout: 276 seconds] | 23:31 | |
-!- ptizoom [~christian@host-92-21-194-73.as13285.net] has joined #shogun | 23:43 | |
-!- ptizoom [~christian@host-92-21-194-73.as13285.net] has quit [Ping timeout: 260 seconds] | 23:50 | |
--- Log closed Thu May 12 00:00:52 2016 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!