Open in new window / Try shogun cloud
--- Log opened Wed May 11 00:00:51 2016
-!- HeikoS [] has joined #shogun00:13
-!- mode/#shogun [+o HeikoS] by ChanServ00:13
-!- HeikoS [] has quit [Ping timeout: 244 seconds]00:18
-!- lstsn is now known as lisitsyn01:50
-!- besser82_ [~besser82@fedora/besser82] has quit [Ping timeout: 244 seconds]03:08
-!- mizari [] has joined #shogun06:06
Saurabh7CaBa, well if the cast fails it returns a null pointer, so its a check that it is not06:11
Saurabh7and 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 check06:34
-!- besser82_ [~besser82@fedora/besser82] has joined #shogun09:12
-!- mode/#shogun [+o besser82_] by ChanServ09:13
@wikingCaBa: where's this?09:27
@wikingSaurabh7: hey here?10:52
Saurabh7wiking, hey sry was afk11:13
-!- HeikoS [] has joined #shogun11:14
-!- mode/#shogun [+o HeikoS] by ChanServ11:14
Saurabh7HeikoS, hi !11:15
-!- HeikoS [] has quit [Quit: Leaving.]11:22
CaBawiking: in my fork11:22
CaBaSaurabh7: i see... i should probably implement it the same way then...11:24
@wikingSaurabh7: how's going with your preparations?11:28
-!- HeikoS [] has joined #shogun11:35
-!- mode/#shogun [+o HeikoS] by ChanServ11:35
@wikingHeikoS: yo11:37
@HeikoSwiking: yoyo11:49
@HeikoSSaurabh7: hi!11:49
Saurabh7HeikoS, yo11:59
Saurabh7wiking, 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
Saurabh7But basicaly i found big performance difference similar to Kmeans in few say decision trees id3 etc, clustering algo etc12:01
Saurabh7others its comparable but could be parallelized and improved i think12:01
Saurabh7like this issue wu pointed out in random forests12:01
@HeikoSSaurabh7: I was a bit busy recently, sorry12:02
@HeikoSbut will read today or tomorrow and give feedback12:02
Saurabh7HeikoS, its almost same as in proposal but need to decide preferences and whats important maybe12:03
Saurabh7HeikoS, np :)12:03
@HeikoSyeah definitely12:04
@HeikoSSaurabh7: what you should do at this point in time is to investigate12:04
@HeikoSso document and explore as good as possible:12:04
@HeikoS1.) which algorithms are slow12:05
@HeikoS2.) how slow12:05
@HeikoS3.) in which setting they are slow12:05
@HeikoS4.) what might be the reason12:05
@HeikoSso this is purely exploring, but very explicitly12:05
@HeikoSthe other thing is: try to create a priority list12:05
@HeikoS1.) algorithms which are very fundemental should have high priority12:06
@HeikoS2.) algorithms which are extremely slow should have high priority12:06
@HeikoSmaybe you can order them according to that12:06
Saurabh7HeikoS, hm ok i will try to build up on this things already found and try to answer this points12:06
Saurabh7HeikoS, what about this feature view thing, it had been discussed long ago12:07
@HeikoSSaurabh7: basically, when gsoc starts, there should be no doubts on what to do12:07
Saurabh7it might be needed to paralllieze things like random forests12:07
@HeikoSso all decision making should happen now12:07
@HeikoSSaurabh7: that doesnt have priority, its more linalg/internals12:07
@wikingSaurabh7: okey just fwd the email plz12:07
@HeikoSSaurabh7: or do you need it anywhere?12:08
Saurabh7HeikoS, ok12:08
Saurabh7HeikoS, to parallelize some algos it might be needed12:08
@HeikoSSaurabh7: I recently played a bit more with cache locality, that is, read data from memory in sequential order, which can make a huge difference12:08
@HeikoSSaurabh7: you could think how that can be applied to shogun algos12:08
@HeikoSexample for that: create a large matrix12:09
Saurabh7HeikoS, thats a new one i will look into it12:09
@HeikoSand iterate through all values of it (e.g. sum them up)12:09
@HeikoSthen compare the performance of random order12:09
@HeikoSvs sequential order12:09
@HeikoSand you will find large differences12:09
@HeikoSif you understand this principle, then you can often gain a factor of 2 or even more12:10
@HeikoSSaurabh7: I sent an email with some pictures that illustrate it12:10
@HeikoSok gotta run now, see you later12:11
Saurabh7sounds good i will look surely12:11
Saurabh7HeikoS, ok cya12:11
-!- HeikoS [] has quit [Ping timeout: 260 seconds]12:15
CaBaI 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
CaBaDo you mind if I PR this?12:16
@wikinggo ahead!12:29
@wikingSaurabh7: email12:29
Saurabh7wiking, oops sent12:34
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has joined #shogun13:05
sanujwhy don't we have a gitter room13:07
sanujit's better13:07
sanujand everyone uses it13:07
sanujtorch, bvlc caffe13:07
sanujopenai gym13:09
sanujscikit learn also13:09
sanuji just remembered13:11
sanujwe had it13:11
sanujbesser82_: there?13:14
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has quit [Ping timeout: 250 seconds]13:32
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has joined #shogun13:32
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has quit [Ping timeout: 250 seconds]13:36
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has joined #shogun13:45
@wikingsanuj: we have a gitter room13:51
@wikingbut dont tell me that gitte ris better than irc :)13:51
@wikingit's like at least 25 years older and more mature/open protocol (irc)13:52
sanuji see13:52
@wikingbut we do have a gitter room13:53
sanuji could only tell from the point of view of a user using it13:53
sanujyeh i know13:53
@wikingthere's less people in the gitter room :)13:54
@wikingsanuj: ah you wanna bet that there are 100x more people using irc13:54
@wikingthan gitter ?:)13:54
@wikingat least13:54
sanujyes definitely, more people use irc13:54
sanujthe link is not opening here13:57
sanujwiking: can you tell me how to get started with dynaplugz?13:57
sanujwe should have the plugin frame work ready and working before the coding period starts13:59
-!- HeikoS [~heiko@] has joined #shogun13:59
-!- mode/#shogun [+o HeikoS] by ChanServ13:59
@wikingsanuj: ok14:01
@wikingso we definitely want to have a shogun-base14:01
sanujon github14:04
sanujbesser82_ said he will write the basic code required and then i can continue14:04
sanujbut the last commit is from march14:04
Saurabh7sanuj, ping14:23
sanujSaurabh7: yo14:23
Saurabh7sanuj, did oyu get some call form fedex ?14:24
sanujSaurabh7: nope14:24
-!- mizari [] has quit [Read error: Connection reset by peer]14:24
sanujwhat about14:25
sanujgsoc package?14:25
-!- mizari [] has joined #shogun14:25
Saurabh7ye did you get yours ?14:26
sanujno i didn't anything14:26
sanujdid you get yours?14:27
Saurabh7stuck at customs :D i dunno tf that guy wanted,some forms14:27
lisitsynoh good you remind me14:35
lisitsynI should send my tshirt to sonney2k_14:36
lisitsynsanuj: how's it going?14:44
sanujlisitsyn: i got some easy c++ code working with swig to produce python bindings14:45
sanujread about templates and classes14:46
sanujneed to write the interface for the tags prototype14:46
lisitsynlet me know if you need any help14:46
sanuji want to start contributing to dynaplugz14:46
sanujbjorn wanted to write the base code first14:47
sanujbesser82_: ping14:47
sanujwe should have a working plugin framework before the coding period begins14:47
@wikingthere are couple of things14:49
lisitsynyeah but that's easy14:49
@wikingwhat we need to decide14:49
lisitsynno need for mature library14:49
@wikingdo we want like a new repo14:49
@wikingfor all of these?14:49
@wikingbut the other stuff is14:50
@wikingjust to port in all the base classes, i.e. interfaces14:50
@wikinginto one module14:50
lisitsynI vote for adding new stuff to SGObject directly14:50
lisitsynwiking: get/set with tags14:51
lisitsynand string-based get/set14:51
@wikingah yeah14:51
sanuji think we should have a separate repo where we migrate all the old shogun classes once we have the base-shogun ready14:51
lisitsynthat would be a mess14:52
@wikingthat's for sure not a good idea :)14:52
sanujand i think base-shogun should have dynamic plugin loading and whatever lisitsyn has added14:52
sanujokay :)14:52
@wikingwe should separate repos14:52
@wikinginto different things14:52
@wikinglike kernels14:52
@wikingthat way things are more traceable14:52
lisitsynnot sure14:52
@wikingbut we could do even more tricky stuff14:52
sanujso you mean diff repo for kernel, diff repo for features and so on?14:52
@wikingeither that14:53
@wikingor even go with 1 repo for all14:53
lisitsynI am not a fan of splitting repos14:53
lisitsyn(I work for big company haha)14:53
@wikingand have things a bit differently partitions14:53
sanujwill each repo be a plugin?14:53
@wikingmeaning we have 1 repos14:54
@wikingbut there you simply just have a separate folder for each 'plugin'14:54
lisitsynversioning stuff would be tough though14:54
lisitsyntags won't work14:54
lisitsynbranches won't work14:54
lisitsynwiking: I think we should tell our plugins from other plugins14:55
lisitsynI mean it could be ok if we have a set of plugins synchronized with the main repo14:55
@wikingah i see14:55
lisitsynbut not fancy impl of paper of HeikoS14:55
@wikingyeah we could do that as well14:56
lisitsynthen we can go with the 'plugins/' directory14:56
@wikingbut we definitely14:56
sanujthese will be the essential plugins installed with base shogun?14:56
@wikingneed a separate repo14:56
@wikingfor GPL stuff14:56
lisitsynsanuj: yes, but not loaded by default14:57
@wikingyeah by default nothing is loaded14:57
@wikingbut yeah we should define14:57
@wikingthe whole shogun-base14:57
sanujlisitsyn: loaded when only called from python or equivalent14:57
@wikingthat is the base fw14:57
@wikingor from c++14:57
sanujhow do i go from dynaplugz to shogun-base?14:59
@wikingso first you have the interfaces15:00
@wikingand sgobject needs to be extended15:00
@wikingto support tags15:00
-!- HeikoS [~heiko@] has quit [Ping timeout: 250 seconds]15:01
sanujjust to be clear, interfaces are swig interfaces right?15:01
@wikinginterfaces are the abstract classes in shogun codebase15:02
@wikinginterface = java semantics15:02
sanuji see15:02
sanujso extended sgobject and all abstract classes15:03
@wikinghave you checked shogun's code?15:03
@wikingi mean like CKernel15:03
@wikingand CFeatures15:03
sanujnot in detail15:03
@wikingare all derived from SGObject15:03
sanuji know that15:04
sanujeverything is derived from sgobject15:04
@wikingnot really15:04
@wikingbut most of the things15:04
@wikingso please15:04
@wikingstart looking at shogun's code in detail15:05
@wikingand for example15:05
@wikinglet's put a list together15:05
sanujyes sir :D15:05
@wikingwhich classes shoudl be in that15:05
lisitsynyeah there must be a list15:05
lisitsynwhich interfaces are core15:06
@wikingsanuj: maybe start a gdocs15:06
@wikingand share it15:06
@wikingso we can discuss this easier15:06
lisitsynyeah whatever way15:06
lisitsynI can deffs say15:06
lisitsynCDotFeatures, CFeatures, CKernel, CDistance, ...15:06
lisitsynbut there are some cases15:06
lisitsynnot that easy cases ;P15:07
@wikingyeh maybe some refacts will be required15:07
@wikingbut anyhow15:07
@wikinglet's have a list15:07
@wikingabout which we can start discussing15:07
lisitsynwiking: sanuj: it could be a list of exports for swig15:07
@wikingsanuj: check how the renames are done15:08
@wikingwithin current shogun15:08
@wikingfor swig15:08
sanuji saw in the shogun code15:08
@wikingso in that format15:08
@wikinglets have a list15:08
sanujfor templates15:08
@wikingnot only15:08
@wikingit's for all classes15:08
@wikingthat are exposed for swig interfaces15:08
-!- CaBa [~Diu7saig@unaffiliated/caba] has quit [Ping timeout: 250 seconds]15:11
-!- CaBa [~Diu7saig@unaffiliated/caba] has joined #shogun15:12
sanujwiking: gmail id15:12
sanujwiking: lisitsyn
lisitsynyeah let's just not lose the link :D15:16
sanujdo we want a gist15:18
@wikingif you write code15:19
@wikingthen yes15:19
sanujwiking: but how will multiple people edit it?15:23
sanuji'm talking about github gist15:23
@wikingeveyr gist is a repo essentially15:25
sanujwiking: lisitsyn
@wikingarent' we writing a .i file? :)15:27
lisitsynthat's ok15:27
@wikinglets' just do it15:27
lisitsynwiking: we can ``` ```15:27
@wiking^ can15:27
sanuji'll rename it15:27
sanujhow does it work with gists15:32
sanuji don't think there are PRs15:32
lisitsynno why15:33
lisitsynyou just edit it15:33
lisitsynand we comment15:33
lisitsynI think you can give us access if necessary15:33
sanujno access thingy here15:34
lisitsynnah nevermind then15:34
lisitsynok commented15:36
CaBasanuj: you are from assam? :)16:40
sanujCaBa: i study in assam :D16:40
sanujbut i'm from Jaipur16:40
CaBasanuj: ah, i see16:43
sanujCaBa: are you from india?16:45
CaBasanuj: nope, i'm from germany. assam just raised my attention since i just recently became aware of the seven sister states when i travelled myanmar16:47
CaBasanuj: kinda embarassing but that part of india wasn't in my brain world map before :)16:48
sanujCaBa: oh i see :)16:48
CaBasanuj: from india i've only seen the very south so far, mostly tamil nadu16:49
CaBathere might be an opportunity to see the north this year though :)16:49
sanujironically i have never been to tamil nadu16:51
sanujhave some friends there16:51
sanujmost southern part that i have visited is Mumbai16:51
sanujCaBa: roamed around a lot in north though16:52
CaBatotally on the todo list16:53
CaBai'm also somewhat curious about bhutan16:54
Saurabh7you guys should visit Goa :D17:00
-!- OXPHOS [8ca3fe9e@gateway/web/freenode/ip.] has joined #shogun17:03
OXPHOSIm late for the party : (17:05
@wikingwhat party17:07
@wikinggoa party?17:07
CaBaSaurabh7: not that much into party tourism ;)17:08
Saurabh7CaBa, ah i see :)17:09
-!- travis-ci [] has joined #shogun17:09
travis-ciit's lambday's turn to pay the next round of drinks for the massacre he caused in shogun-toolbox/shogun:
-!- travis-ci [] has left #shogun []17:09
OXPHOSwiking: fancier one.. saw the irc log. Lots of people around : )17:11
lisitsynyou should visit moskva!17:13
-!- HeikoS [] has joined #shogun17:15
-!- mode/#shogun [+o HeikoS] by ChanServ17:15
CaBalisitsyn: :D17:18
sanujlisitsyn: you got back your vowels!!!!!!!!!!!!!!!!17:18
Saurabh7davai moskva17:18
sanuji need to train a model now which requires all of my laptop's ram17:23
sanujso goodbye chrome :P17:23
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has quit [Quit: Page closed]17:23
@wikingsanuj: for the (irc) record: use irsii or bitchx ;)17:35
@wikinglisitsyn: who's your client? :D17:35
lisitsynwiking: irssi over znc17:36
@wikingi wanna try again bitchx :)17:43
@wikingi really liked that client17:43
lisitsynBitchX 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
CaBawiking: did you... just recommend bitchx?!17:53
@wikingbest client ever17:53
CaBainteresting... where i come from it's considered worse than mIRC ^^17:54
@wikingmirc fuck17:54
@wikingthat is a piece of fucking shit17:54
CaBadoes bitchx still do this terrible bold type thing?17:55
CaBawiking: yes. that's why i mentioned it to illustrate bitchx's reputation ^^17:55
@wikingso what's a good client for you? :)17:56
CaBairssi of course17:56
CaBai didn't know there was another opinion!17:56
CaBadoes emacs exist? ;)17:56
OXPHOSI 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
@HeikoSOXPHOS: hey hey :)17:59
@HeikoSsorry I was so busy recently17:59
@HeikoSbut its better soon17:59
@wikingbut wait17:59
@wikingwhere's the proposal :D18:00
OXPHOSlisitsyn: 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
@wikinglemme see again18:00
@HeikoSOXPHOS: looking at it now18:00
lisitsynOXPHOS: please ping me anytime but I could be drunk and fail to respond18:00
lisitsynOXPHOS: have you seen my 'Some' class?18:01
OXPHOSHeikoS: Thx! No rush. Just want to make sure I can get everything done on time.18:01
@HeikoSOXPHOS: you are right18:01
@HeikoScan you point me on something that we should start with discussing?18:01
@HeikoSfor linalg, lambday and wiking had a discussion18:01
OXPHOSlisitsyn: Nope sorry. where is it?18:02
@HeikoSwe need some decisions there18:02
lisitsynOXPHOS: shogun/base/some.h IIRC18:02
@HeikoSthe 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 calls18:02
OXPHOSHeikoS: Yes I guess people have different ideas18:02
@HeikoSlisitsyn: noooo18:03
@wikingi'm tired of deep neural nets18:03
lisitsynseriously why not haha18:03
@wikinglets do something else18:03
@HeikoSbecause we can't18:03
@HeikoSneed python to use it18:03
@wikingwe cant what?18:03
@HeikoSuse tensorflow18:03
@wikingthey use swig18:03
lisitsyndas ist not korrekt18:03
@wikingits eigen + c++18:03
@wikingwhat no?18:03
lisitsynit is18:04
@HeikoScannot build computation graphs from C++18:04
@HeikoSonly execute18:04
@HeikoSso you have to build the graphs in python18:04
@HeikoSthen execute with c++18:04
@wikingeh shitfuckers18:04
lisitsynbut we don't need graphs18:04
@HeikoSotherwise I would have done a project on that ;)18:04
lisitsynwe need tensors18:04
@wikingOXPHOS: so i added an idea18:04
@HeikoSgraphs as in computation description18:04
OXPHOSlisitsyn: Lemme check. Wondering why other people can compile successfully. Thx!18:04
@HeikoSwiking: you still owe us this mail about the linalg design18:04
@wikingfuck deep nets18:04
lisitsynDEEP NETS18:05
@wikingHeikoS: i've replied18:05
@HeikoSah really18:05
@HeikoSsorry didnt see yet18:05
@wikingbut yeah i should explain that more afaik18:05
OXPHOSwiking: thx. sorry I forgot to mention page 3-4 are new stuff18:05
@HeikoSvirtual functions llama?18:05
@wikingHeikoS: yeah18:05
@wikingOXPHOS: ok checking bassza meg18:06
@HeikoSwiking: ok read it18:06
@HeikoSwhat do we do with OXPHOS?18:06
@HeikoSin terms of linalg18:06
@HeikoSwiking: I am just discussing with rahul here18:10
@HeikoSso lets say linalg is a plugin18:10
@HeikoSthen signature need to use SGMatrix etc18:10
@HeikoSOXPHOS: you follow as well?18:10
@HeikoSlisitsyn: ^18:10
-!- lambday [8028b10a@gateway/web/freenode/ip.] has joined #shogun18:10
-!- mode/#shogun [+o lambday] by ChanServ18:10
@lambdaywiking: lisitsyn: yo!18:11
@HeikoSbut if this is the case, then how to we avoid that data is transferred to GPU in every call on viennaCL things18:11
@wikinglambday: hola18:11
@wikingHeikoS: w818:11
@HeikoSsitting next to each other btw 8-)18:11
@wikingi'm currently commending on the doc18:11
@HeikoSah ok18:11
@wikinggimme 5 more mins18:11
@HeikoScool sure18:11
@lambdaywiking: yeah me and Heiko were discussing about the interface that the linalg plugin shoudl provide!18:11
@HeikoSOXPHOS: ok so linalg needs a bit discussion18:12
@HeikoSOXPHOS: lets talk about serialization18:12
@HeikoSwhile wiking comments18:12
OXPHOSHeikoS: Sure18:12
@HeikoSwhat we need for that is a working prototype to start with18:12
@HeikoSyou mentioned you had 2 ideas18:13
OXPHOSHeikoS: Ah you mean the code18:13
@HeikoSI mean we need something that cerealises an existing shogun class18:14
@HeikoSOXPHOS: can you ellaborate a bit on your proposal?18:15
OXPHOSHeikoS: Thought I'll start that when I'm reaching that part18:16
OXPHOSSo now the parameters need to be saved are added via SG_ADD18:16
@HeikoSOXPHOS: I think it would be great to write a minimal example that is self contained18:16
@wikingok i think i'm done18:16
@wikingOXPHOS: i second HeikoS idea18:17
@wikingand the same should be done for shared_ptr18:17
@wiking(see my commment in your doc)18:17
@HeikoSOXPHOS: it doesnt need to be embedded into shogun fore now18:17
@HeikoSbut illustrate the technical problems and how then can be solved18:18
@HeikoSso create a fake shogun class18:18
@HeikoSand code that uses cereal18:18
@HeikoSreally important to do this stuff relatively early18:18
@wikingarianepaola: we have a possible starter for pipy... do you want to further work on that for the time being?18:18
@wikingit should be straight forward to fix and finish it18:18
OXPHOSHeikoS, wiking: so like an independent test case, but looks like a shogun one?18:19
@HeikoSOXPHOS: exactly18:19
@wikingyep yep18:19
OXPHOSokay got it18:19
@wikingshould be really striaghtforward18:19
@wikingand the hdf5 thing i would really leave it18:20
@wikingwhen you have time18:20
@wikingand forget asccii output18:20
@wikingso the default cereal output formats18:20
OXPHOShaha okay. This would make thins easier18:20
@wikingare good... and if you have remaining time you can do those18:20
@wikingyep yep18:20
@wikingit's just better to have the whole serialization working18:21
@wikingwith cereal18:21
@HeikoSwiking: so about the linalg18:21
@HeikoSso lets say it is a plugin18:21
@HeikoSand all the methods take SG* as input18:21
@HeikoSok then we have a few cases18:22
@HeikoS1.) all is CPU, that is easy as it is as things are now18:22
@HeikoS2.) I explicitly want to run a linalg operation on GPU18:22
@HeikoShow would that work?18:22
@wikingok so if you want to have gpu linalg18:22
@HeikoSwe can create a GPUMatrix in Shogun code, and then wrap a SGMatrix around it, and pass it to linalg18:22
@wikingyou set your new linalg backend18:23
@HeikoSor does every call to gpu linalg transfer data?18:23
@wiking(a plugin)18:23
@HeikoSI see18:23
@wikingthat'll load all the shit in18:23
@HeikoSwhen does the data transfer happen?18:23
@HeikoSin every call?18:23
@wikingyou transfer it once18:23
@wikingwhy would you transfer it back an forth18:23
@HeikoSso there is like a method for that?18:23
@HeikoSagreed,  .... how does it look like18:24
@HeikoSsince the method iterface is SGMatrix18:24
@wikingyou can have a static code for that18:24
@wikingtransfer to gpu18:24
@wikingtransfer to cpu18:24
@wikingthat function returns you an object18:24
@wikingthat has reference on the data18:24
@HeikoSsay we have big matrix18:24
@wikingin question18:24
@wikingi mean if you know that you wanna use a gpu18:25
@wikingthen you would get that to gpu as soon as possible18:25
@wiking(possibly when you load in the data)18:25
@wikingbut if that's not possible18:25
@wikingyou'll have to do it at some point18:25
@HeikoSso what if no GPU is available18:25
@HeikoSand therefore the plugin18:25
@HeikoSwhat happens?18:25
@wikingyou can have the plugin18:26
@HeikoSinside shogun code18:26
@wikingbut when you load in the plugin18:26
@wikingyou should have an assert/warning18:26
@HeikoSok so runtime error18:26
@wikingthat it cannot be used18:26
@HeikoSno fallback18:26
@wikingand then you can fallback18:26
@wikingwhy cant you18:26
@HeikoSok if we do a fallback18:26
@wikingi mean say you have a linalg interface18:26
@wikingthat will have a default value18:26
@HeikoSthen I am confused how the signatures would look like18:26
@wikingso i would say that our default linalg backend is18:27
@wikingeigen based18:27
@wikingbut that's still a plugin18:27
@wikingbut a plugin that is required18:27
@HeikoSIsnt this very similar to the existing proposal?18:27
@HeikoSjust that it is a plugin18:27
@wikingwhich proposal?18:27
@wikingi mean there was a proposal18:27
@wikingthat a) compile 2 different shoguns18:28
@wikingb) transfer data between cpu-gpu all the time18:28
@HeikoSno we dont want both of that18:28
@wikingi mean i dont see any of these being what i'm talking about18:28
@wikingi know18:28
@wikingthey are xor18:28
@wikingso you have a backend registered18:28
@HeikoSrahul asks what the base class is for both of the matrix classes18:28
@HeikoSfor the runtime fallback18:29
@wikingwhat do you mean by runtime fallback for matrix clas?18:29
@HeikoSbecause the static methods take GPUMatrix18:29
@HeikoSso if no GPU is available18:29
@HeikoSyou said we do fallback to the eigen3 linalg18:29
@wikingyou wont be able to get GPUMatrix18:29
@wikinghow do you get a GPUMatrix object18:29
@wikingif you dont have a GPUMatrix18:29
@wikingi mean18:29
@HeikoSso the code does not run then?18:29
@wikingGPU matrix18:29
@HeikoSthat is, the GPU implementations will not work if there is not GPU?18:30
@HeikoSno fallback to CPU?18:30
@wikingit could18:30
@wikingyou can still have18:30
@wikingthe reference to be a noop18:30
@HeikoSnot sure I understand18:31
@wikingi mean say you have a18:31
@wikingand say you have an implementation of a special algo X18:31
@wikingand that algo x is written in18:31
@wikingusing GPU code18:31
@wikingso you'll have a transfer function18:31
@wikingof the SGMatrix -> GPUMatrix18:31
@HeikoSthat is static18:32
@wikingsomebody will do it for you18:32
@wikingit just represents that the data is on the gpu end18:32
@wikingif you have a GPU that will actually do the transfer18:32
@wikingbut if you dont why cannot that be a NOP?18:33
@wikingit's a bit ugly18:33
@wikingbut will work18:33
@HeikoSso that means: runtime error?18:33
@wikingit's a no operation18:33
@wikingyou dont do anything with the matrix18:33
@wikingno transfer18:33
@HeikoSso it just ignores18:34
@wikingjust wrap it into GPUMatrix18:34
@HeikoSthe call18:34
@wikingand you can continue with the whole thing18:34
@HeikoSso the GPU matrix is still CPU matrix on the computer18:34
@wikinggpumatrix's data will still reside on the cpu18:34
@HeikoSI get it now18:34
@HeikoSI see now18:35
@wikingonly shitty part is18:35
@HeikoSso this means we have to heavily modify GPUMatrix18:35
@HeikoSbut ok18:35
@wikingi mean18:35
@wikingwe could i believe18:35
@wikinglearn some or more18:35
@wikingfrom magma18:35
@wikingi hope they have a nicer way to do this18:35
@wikingnever really checked the code18:35
@HeikoSwiking: I think this NOP thing is ok18:35
@wikingbut who knows18:35
@wikingit's ugly a bit18:36
@HeikoSwiking: I mean in reality18:36
@HeikoSGPU algorithms will be slow as f*** on CPU18:36
OXPHOSNaive idea: cmake detects whether GPU is available/GPU is enabled and generate a FLAG?18:36
@HeikoSand one needs alternative implementation if one wants to change back and forth18:36
@wikingin former times opencv had the similar way18:36
OXPHOSThen do everything in GPU if FLAG=true?18:36
@wikingdunno if they have now a better way to do this18:36
@HeikoSOXPHOS: yes something like this18:37
@HeikoSwiking, OXPHOS, lambday so let me summarise18:37
@HeikoS1.) linalg will become a plugin (not part of OXPHOS work for now, but sanuj)18:37
@HeikoS2.) all methods will be virtual and use SGMatrix SGVector in signatures18:37
@wikinghuh fuck18:38
@wikingopencv's interface is really shit18:38
@wikingit got worse than it was18:38
@wiking2) actually no virtual18:38
@HeikoS3.) there will be some kind of factory which one can ask to transfer data back and forth to GPU that takes and returns GPUMAtrix type18:38
@wikingyou can actually avoid using virtual18:38
@wikingand when you register the backend18:38
@wikingyou register your function pointers18:38
@HeikoS3.) ok no virtual, just overloaded18:38
@HeikoSah I see18:39
@wikingso this way you can avoid the virtual function overhead18:39
@wikingand btw18:39
@HeikoS4.) transfer to GPU is an empty function in case the gpu linalg is not available18:39
@wikingwe should really do something about Features->dot ;)18:39
@HeikoSwiking: yep :)18:39
@HeikoSand we should profile cache misses in shogun18:39
@HeikoSbut OK18:39
@HeikoSthat is your summary for linalg18:39
@wikingHeikoS: yeah i did some changes for false cache stuff18:39
@HeikoSa prototype would be nice here as well18:39
@HeikoSsince it helps for facilitationg these discussions18:40
@HeikoSwiking: cool18:40
OXPHOSgot it.18:40
@HeikoSwiking: we had some 8x factor speedups in MMD tests here via doing this properly18:40
@HeikoSOXPHOS: same here, make a minimal standalone prototype18:40
@HeikoSthat has all important things we mentioned18:40
@HeikoSand that compiles/runs18:40
@HeikoSjust need to put a single operation18:40
@wikingHeikoS: you mean that you dont use virtual functions everywhere ;P18:41
@HeikoSwiking: nono, sweeping through data sequentially18:41
@wikingah yeah18:41
@HeikoSwiking: BTW, this way of linalg doesnt requires it to be a plugin18:41
@wikingpipeline cache18:41
@HeikoSit could be part of base18:41
@HeikoSbut not sure what we do there18:41
@wikingyou mean the interface?18:41
@wikingi mean Linalg18:42
@wikingshould be there in base18:42
@wikingbut it's just the class18:42
@wikingwhere you can register18:42
@wikingthe actual linalg backend18:42
@HeikoSwiking: another question18:42
@HeikoSso you do the transfer call to GPU, and you get a GPUMatrix18:43
@HeikoSno matter whether it happened or not, but you get the type18:43
@HeikoSthen you want to call linalg method18:43
@HeikoSand then linalg methods are overloaded for both CPU/GPUMatrix?18:43
@HeikoSso compile time determined?18:43
@wikingthat's why i said it's a bit ugly18:44
@HeikoSbut then what about this thing:18:44
@HeikoSI have no GPU18:44
@HeikoSI do the transfer call18:44
@HeikoSI get GPUMatrix that lives in main memory18:44
@HeikoSI pass it to linalg::dot( ... )18:44
@HeikoSwhat happens inside there?18:44
@HeikoSit fails?18:45
@wikingit should never fail18:45
@wikingit should seemless do the operation18:45
@HeikoSbut if the type is static18:45
@HeikoShow would the fallback work?18:45
@HeikoSsince I definitely pass GPUMAtrix18:45
@wikingi mena here is the shit part18:45
@wikingthere are couple of way around18:45
@HeikoSthe plugin falls back inside?18:45
@HeikoSas in18:45
@wikingif you know your backend doesn't support18:45
@wikingyou can do a transfer back18:46
@wikingto SGMatrix18:46
@HeikoSif (GPUMatrix.is_cpu) { cpu_linalg::fot( )))18:46
@HeikoSinside linalg::dot() ?18:46
@wikingwhich in case that was a GPUMatrix where data is in main memory18:46
@wikingagain a noop18:46
@HeikoSwhere does this happen?18:46
@HeikoSinside the gpu linalg method?18:46
@wikingyou dont have gpu or cpu linalg method18:47
@wikingyou just have linalg:dot18:47
@HeikoSso the interface then is?18:47
@HeikoSGPUMatrix m18:47
@wikingand now i'm thinking18:47
@wikingdo we really need18:47
@wikingthe distinguishing part18:47
@HeikoSthis is weird18:47
@wikingof CPU/GPU18:47
@HeikoSlet me first understand this18:48
@wikingi mean it will work18:48
@wikingbut too much unnecessary wrapping18:48
@wikingthat's why i'm pivoting the idea18:48
@wikingexam period?18:48
@HeikoSah its turned off again18:48
@wikingso the thing is that you can do these transfer back and forth18:48
@wikingthat is a nop18:48
@HeikoSso when is the conversion of GPUMatrix->SGMatrix happening?18:48
@wikingbut then it's a bit of an overhead18:48
@HeikoSbefore I call linalg::foo?18:49
@wikingif the GPUMatrix was actually18:49
@wikingrepresented in main memory?18:49
@wikingit's a nop right?18:49
@wikingand you do that in the call18:49
@HeikoSbut the type I get is GPUMatrix18:49
@wikingsay it's a dot product18:49
@HeikoSbut linalg::foo needs SGMatrix18:49
@wikingyou are now talking about the actual implementaiton18:49
@wikingnot the interface you'd be calling right?18:49
@HeikoSno just kind of the API18:50
@HeikoSand what is happening18:50
@wikingyeah but fuck18:50
@HeikoSon high level18:50
@wikingand depending on your backend18:50
@wikingone or the other is supported18:50
@wikingi mean what do you do18:50
@wikingwhen you call18:50
@HeikoSwhat happens in linalg::foo(GPUMatrix) if the transfer was nop?18:50
@wikingon a GPU linalg backend?18:50
@wikingwill you do the transfer of SGMatrix -> GPUMatrix18:51
@wikingdo the foo(GPUMatrix)18:51
@wikingthen do the GPUMatrix -> SGMatrix and return?18:51
@wikingfrom linalg::foo(GPUMatrix)18:51
@wikingi mean in some way it's the same problem18:51
@HeikoSnono I was just confused18:51
@wikingno what i mean now18:52
@HeikoSbut my question still is what how the fallback works18:52
@wikingwhat do you do in this case really?18:52
@wikingyeah but fuck18:52
@wikingit's the same problem18:52
@HeikoSwhen linalg::foo(GPUMatrix) is called18:52
@wikingok so you have a linalg::foo(GPUMatrix)18:52
@wikingand you backend is actually cpu18:52
@wikingthen you will do a NOP GPUMatrix -> SGMatrix18:52
@wikingcall linalg::foo(SGMatrix)18:53
@HeikoSinside the foo method?18:53
@wikingas you can see this is the same problem18:53
@wikingas i've mentioned about18:53
@wikingGPU backend getting SGMatrix18:53
@wikingand there18:53
@wikingthe bigger question is18:53
@wikingwhat is your backend18:53
@wikingand how do you have a reference on that?18:53
@HeikoSmmh this fallback inside each method of linalg seems a bit strange to me18:54
@wikingok so lets take the other problem18:54
@wikingthe one above18:54
@wikingGPU backend18:54
@wikingand you have a GPU18:54
@wikingand you regitered the linalg backend to be GPU18:54
@wikingdid you imagine to runtimeexception18:54
@wikingwhen you call linalg::foo(SGMatrix)18:55
@HeikoSthat should work18:55
@HeikoSas I dont want everything to be GPU18:55
@HeikoSwhat 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
@wikingbut how will it work?18:55
@wikingi mean you'v just regitered your linalg backend to be GPU18:55
@wikinghow will then your SGMatrix linalg method still work?18:56
@wikingwhich bakcend will you use?18:56
@HeikoSI see18:56
@HeikoSno only selected calls should be GPIU18:56
@wikingso you say18:56
@wikinglinalg is ALWAYS cpu18:56
@wikingand then you can choose some functions to be working18:56
@wikingas gpu18:56
@wikingif you register them?18:56
@wikingotherwise you expect that to still work18:57
@HeikoSyes I think so18:57
@wikingwith cpu?18:57
@HeikoSyes if GPU is not available18:57
@wikingok cool18:57
@wikingthen i would just stop18:57
@wikinghaving gpumatrix18:57
@HeikoSand do everything inside SGMatrix18:57
@wikingand then do the transfer18:57
@wikingby hand in the algo18:58
@wikingif there's gpu backend18:58
@wikingand then you call the fucking thind18:58
@HeikoSsince the transfer is expensive18:58
@HeikoSwe want to be explicit18:58
@wikingand then it'll work either with the gpu18:58
@wikingbacked one18:58
@wikingor just the simple one18:58
@wikingif no gpu18:58
@wikingi think this is cleaner18:58
@wikingbecause then you dont need18:59
@wikingjust linalg::foo(SGMatrix)18:59
@wikingand you can have like SGMatrix.onGPU()18:59
@wikingand if it's on gpu then you call the gpu backend18:59
@wikingotherwise fallback18:59
OXPHOS: )19:00
@HeikoSso we dont have two plugins19:00
@HeikoSso if I call linalg::foo(SGMatrix)19:01
@wikingno you still have a plugin19:01
@HeikoSinside that method, it check SGMatrix::onGPU()19:01
@wikingGPU plugin19:01
@wikingi mean that you register19:01
@HeikoSand then calls the corresponding thing19:01
@wikingi mean that's a plugin19:01
@wikingyou can have it available19:01
@HeikoSyeah ok19:01
@HeikoSso still plugins19:02
@wikingyeah yeah19:02
@wikingdont want to statically compile it19:02
@wikingbut yeah19:02
@wikingyou make it sure that its regitered19:02
@wikingand say19:02
@wikingif you have19:02
@wikingwhere SGMatrix::onGPU() = True19:02
@wikingbut you didn't register a GPU backend19:02
@wikingthen you throw a big motherfucking runtime exception19:02
@wikingto the user19:02
@wikingthat he is an idiot19:02
@HeikoSok agreed :D19:02
@wikingbecause he transferred the data to gpu19:03
@wikingbut not registered the gpu backend for the linalg19:03
@HeikoSwhat exactly means registiering the gpu backend?19:03
@wikingwell you say to the linalg 'interface'19:03
@wikingi mean the thing is here19:04
@HeikoSand this happens in the algorithms19:04
@wikingor whenever19:04
@wikinguser can override this19:04
@wikingat any point of time19:04
@wikingi mean19:04
@wikingthe idea is here19:04
@wikingthat we can have19:04
@wikingN different CPU linalg backends19:05
@wikingand K different GPU linalg backends19:05
@wikingso actually19:05
@wikingi would have in linalg19:05
@wikinga function19:05
@wikingand then it'll use the registered GPU backend19:05
@wikingand if no backend is available19:05
@HeikoSok but by "user" you mean shogun developer that writes algo?19:05
@wikingi.e. not registered19:05
@HeikoSor actualy user?19:06
@wikingwell that's the thing19:06
@wikingyou dont want to anchor the actual GPU backend19:06
@wikingi mean you just want that the algo using gpu19:06
@HeikoSwe want to be able to change19:06
@wikingif possible19:06
@wikingbut you dont really care19:06
@wikingif it's cuda or something else19:06
@HeikoSso inside algorithm, we just assert that fact THAT there is GPU, not WHICH backend19:06
@wikingbecause it should be the user's decision19:07
@HeikoSabout the runtime error19:07
@HeikoSuser doesnt register GPU backend19:07
@wikingwhich actual implementation of linalg he wanna use19:07
@HeikoSbut calls algo which contains a transfer19:07
@HeikoSshould still work right?19:07
@wikingit's a NOP19:07
@wikingyou can warning it19:07
@wikingso that the user knows19:07
@wikingthat it's gonna be shit19:07
@wikingbecause he didn't register a GPU backend19:07
@wikingits either intentional19:08
@wikingor by mistake19:08
@wikinguser will decide19:08
@HeikoSok cool19:08
@HeikoSI am happy with this19:08
@wikingthe soon we'll have to have19:08
@HeikoSOXPHOS: overwhelmed? ;)19:08
@wikingshogun.config file19:08
@HeikoSOXPHOS: make sure you ask questions19:08
@HeikoSsince you will be the person drafting this19:08
@HeikoSIRC_log -> C++ prototype -> shogun code19:09
@wikingsanuj ^ when you read the irc logs19:09
OXPHOSHeikoS: I'll take some time to digest :P19:09
@wikingmaybe with the whole plugins thing19:09
@wikingwe'll need to add a support for shogun config19:09
@HeikoSOXPHOS: one thing is that most of the design doesnt depend on linalg being a plugin yet19:09
@wikinga) where are the .so-s residing19:09
@HeikoSOXPHOS: the transfer calls, the method signatures the unit tests etc etc19:09
@wikingb) which linalg backend you wanna use19:09
@wikingHeikoS: ^ what do you say19:09
@HeikoSwiking: yeah19:09
@HeikoSI think that is good19:10
@wikingi think this should be config file19:10
@wikingor seomthing19:10
@HeikoSyeah definitely19:10
@HeikoSgood for experiments19:10
@wikingbecause the parameters will grow very rapidly19:10
@HeikoSwe can actually use that to replace these horrible HMM_USE_SHORT_REAL19:10
@wikingi mean a simple key=value file is good19:10
@wikingyeah indeed19:10
@HeikoSwiking: I know19:10
@HeikoSwe can use a19:10
@HeikoSPython dictionary19:10
@HeikoShahah ;D19:10
@wikingjson? :D19:11
@HeikoSyeah or just text19:11
@HeikoSgood idea19:11
@HeikoSOXPHOS: btw as for priorities19:11
@HeikoSOXPHOS: can you write this down in a summary?19:11
@HeikoSin your doc19:11
OXPHOSHeikoS: doens't really know how plugin makes a difference yet :( ... will look up19:11
@HeikoSdesign goals, API details19:11
OXPHOSHeikoS: sure19:11
@wikingHeikoS: you are using her as a secretary? :)19:11
@HeikoSwell it is her project19:12
@wikinghehehe and sanuj's19:12
@HeikoSwiking: thanks for discussion btw, super helpful19:15
@wikingno worries19:15
@lambdaywiking: that really helped a lot19:15
@HeikoSOXPHOS: about the cereal stuff, I think we can only really discuss this once there is a prototype19:15
@lambdaygottta run for now.. see you!19:15
-!- lambday [8028b10a@gateway/web/freenode/ip.] has quit [Quit: leaving.]19:15
@HeikoSplease let us know if there are any problems creating this19:15
@HeikoSSaurabh7: you are still around?19:16
@wikingOXPHOS: if you have a problem with cereal let me know i can help19:16
@wikingand with the docs19:16
@wikingjust put anything into your gdocs19:16
@wikingping me19:16
@wikingand then we can review19:16
@wikingit really doesn't matter if it's not perfectly clear19:16
@wikingjsut lets ahve something that we can later modify etc19:16
@HeikoSSaurabh7: please use callgrind to profile benchmarks you write -- in particular for the cache miss19:16
@wikingbest profiler19:17
@HeikoSSaurabh7: I have this idea of systematically checking all the algorithms you touch, and producing a report for the end19:17
@HeikoSor prof ^:)19:17
@wikingmmm but19:17
@wikingwe should actually19:17
@wikingbuildbot this19:17
@HeikoSwe should really be aware19:17
@HeikoSwiking: good point19:17
@wiking(systematically checking algos)19:17
@wikingi mean i'm now w8ing on amazon19:18
@HeikoSand creating historam19:18
@wikingas then i'm moving all the builds19:18
@HeikoS :)19:18
@wikingto aws19:18
@HeikoSprofiler can be on aws right?19:18
@wikingand use our current machines19:18
@wikingit's not reliable19:18
@wikingbut we have our own machines19:18
@HeikoSfor like l2 cache miss?19:18
@wikingwe can do those there19:18
@wikingnono aws is a shit19:18
@wikingit's VPS19:18
OXPHOSSure thank you guys19:18
@wikingso the actual IO and CPU performance19:18
@wikingpretty much depends19:18
OXPHOSSo far cereal doesn't seem to be big issue19:18
@wikingon the host machine's load19:19
@wikingso doing benchmarks on aws is really not a good idea19:19
@wikingas it's not consistent19:19
@wikingrcurtin and mlpack is not using aws for the same reason for benchmarking19:19
@wikingbut once we have the aws credits19:19
@wikingwe can move every test build there19:20
@wikingand use the barebone machines19:20
@wikingfor benhcmarking19:20
@HeikoSyeah I see19:20
@HeikoSget it19:20
@HeikoSwiking: man I am really amazed by this cache miss/git thing19:20
@HeikoSsuch a big difference19:20
@HeikoSbetween c++ impementations19:20
@HeikoSI mean factor 8 -- come on19:20
@HeikoSof my 2012 gsoc project to what we hav enow19:21
@HeikoSand thats not even multicore19:21
@wikingHeikoS: what actually did you there?19:32
@wikingrandom accessed the CFeatures?19:32
@HeikoSyes kernel matrix19:32
@HeikoSbased on block wise sums19:32
@HeikoSof a big matrix19:32
@HeikoSthat is permuted19:33
@wikingi see19:33
@HeikoSso just changing from reading sequentially over permutation vector to sequentially over data helped a lot19:33
@HeikoSthen some other things19:33
@HeikoSthat depend on algo19:33
@wikingah btw19:34
@wikingWHO WILL19:34
@wikingdo as part of gsoc19:34
@wikingthe subset of CFeatures19:35
@wikingand i really want that on the end of this gsoc19:36
@HeikoSSaurabh7: ^19:38
@HeikoSadd that to your listr19:38
@HeikoSfor your bagging machine right?19:38
@wikingi mean it would be nice to have a thread-safe view on a cfeatures19:39
@HeikoSwiking: actually19:39
@HeikoSSaurabh7: already brought that up19:39
@HeikoSwhat would be cool19:39
@HeikoSwould be a general view19:39
@HeikoSon matrices and vectors19:39
@HeikoSnot just features19:39
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has joined #shogun19:39
@HeikoSthat also includes dimensions19:39
@HeikoSlike numpy array19:40
@wikingyeah yeah19:41
@wikingi mean i dont care how it is solved :)19:42
@wikingand how abstract it is19:42
@wikingjsut that we have this fixed19:42
@HeikoSalso needed for parallel xvalidation19:44
@HeikoSSaurabh7: that is another one for your project19:44
-!- besser82_ [~besser82@fedora/besser82] has quit [Remote host closed the connection]19:51
-!- besser82 [~besser82@fedora/besser82] has joined #shogun19:52
-!- mode/#shogun [+o besser82] by ChanServ19:52
-!- sanuj [0e8bc402@gateway/web/freenode/ip.] has quit [Ping timeout: 250 seconds]20:40
arianepaolawiking: sure21:22
-!- HeikoS [] has quit [Ping timeout: 252 seconds]21:52
-!- besser82 [~besser82@fedora/besser82] has quit [Ping timeout: 260 seconds]21:55
-!- ptizoom [] has quit [Ping timeout: 250 seconds]22:31
-!- mizari [] has quit [Ping timeout: 276 seconds]22:42
-!- OXPHOS [8ca3fe9e@gateway/web/freenode/ip.] has quit [Quit: Page closed]22:44
-!- ptizoom [] has joined #shogun22:45
-!- ptizoom [] has quit [Ping timeout: 250 seconds]22:51
-!- ptizoom [] has joined #shogun23:03
-!- ptizoom [] has quit [Ping timeout: 244 seconds]23:10
-!- ptizoom [] has joined #shogun23:24
-!- ptizoom [] has quit [Ping timeout: 276 seconds]23:31
-!- ptizoom [] has joined #shogun23:43
-!- ptizoom [] has quit [Ping timeout: 260 seconds]23:50
--- Log closed Thu May 12 00:00:52 2016