{"action":"created","issue":{"url":"https://api.github.com/repos/Tencent/angel/issues/326","repository_url":"https://api.github.com/repos/Tencent/angel","labels_url":"https://api.github.com/repos/Tencent/angel/issues/326/labels{/name}","comments_url":"https://api.github.com/repos/Tencent/angel/issues/326/comments","events_url":"https://api.github.com/repos/Tencent/angel/issues/326/events","html_url":"https://github.com/Tencent/angel/pull/326","id":316539469,"number":326,"title":"[GBDT] Bug fix & histogram subtraction","user":{"login":"Morrissss","id":4962127,"avatar_url":"https://avatars3.githubusercontent.com/u/4962127?v=4","gravatar_id":"","url":"https://api.github.com/users/Morrissss","html_url":"https://github.com/Morrissss","followers_url":"https://api.github.com/users/Morrissss/followers","following_url":"https://api.github.com/users/Morrissss/following{/other_user}","gists_url":"https://api.github.com/users/Morrissss/gists{/gist_id}","starred_url":"https://api.github.com/users/Morrissss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morrissss/subscriptions","organizations_url":"https://api.github.com/users/Morrissss/orgs","repos_url":"https://api.github.com/users/Morrissss/repos","events_url":"https://api.github.com/users/Morrissss/events{/privacy}","received_events_url":"https://api.github.com/users/Morrissss/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2018-04-22T01:14:24Z","updated_at":"2018-04-27T09:37:28Z","closed_at":null,"author_association":"NONE","pull_request":{"url":"https://api.github.com/repos/Tencent/angel/pulls/326","html_url":"https://github.com/Tencent/angel/pull/326","diff_url":"https://github.com/Tencent/angel/pull/326.diff","patch_url":"https://github.com/Tencent/angel/pull/326.patch"},"body":"Fix several boundary bugs. Maybe the beg-end naming convention usually implies left-close-right-open boundaries?\r\n\r\nAdd histogram subtraction to speed up histogram calculation (inspired by [LightGbm](https://github.com/Microsoft/LightGBM). The basic idea is if we already know the histogram one node and its parent's, its sibling's histogram can be simply calculated by subtraction.\r\n\r\nRe-factoring that needs more help and discussion:\r\n- I think in GBDT, each worker group only involves one core. We can not accelerate CPU-intensive process like histogram calculation by multi-threading.\r\n- If I'm wrong, the lock-free `activeNodeStat[]` will face severe racing condition in multi-core environment, and should be replace by `AtomicInteger` or `CountDownLatch`\r\n- So I move the CPU-intensive procedure from `GradHistThread` into `runActiveNode`, leave the IO-intensive part, and remove sample batching. To check whether it is right, benchmark needs to be re-run (histogram subtraction should be disable)."},"comment":{"url":"https://api.github.com/repos/Tencent/angel/issues/comments/384919673","html_url":"https://github.com/Tencent/angel/pull/326#issuecomment-384919673","issue_url":"https://api.github.com/repos/Tencent/angel/issues/326","id":384919673,"user":{"login":"bluesjjw","id":4947607,"avatar_url":"https://avatars0.githubusercontent.com/u/4947607?v=4","gravatar_id":"","url":"https://api.github.com/users/bluesjjw","html_url":"https://github.com/bluesjjw","followers_url":"https://api.github.com/users/bluesjjw/followers","following_url":"https://api.github.com/users/bluesjjw/following{/other_user}","gists_url":"https://api.github.com/users/bluesjjw/gists{/gist_id}","starred_url":"https://api.github.com/users/bluesjjw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bluesjjw/subscriptions","organizations_url":"https://api.github.com/users/bluesjjw/orgs","repos_url":"https://api.github.com/users/bluesjjw/repos","events_url":"https://api.github.com/users/bluesjjw/events{/privacy}","received_events_url":"https://api.github.com/users/bluesjjw/received_events","type":"User","site_admin":false},"created_at":"2018-04-27T09:37:28Z","updated_at":"2018-04-27T09:37:28Z","author_association":"COLLABORATOR","body":"To answer your questions.\r\n- Recent GBDT systems generally use multi-threading to accelerate training. For example, XGBoost processes several data blocks in parallel. Our method, however, processes sibling tree nodes in parallel.\r\n- You are right. AtomicInteger seems better.\r\n\r\nThanks for your contributions and suggestions.\r\nPlease keep in touch."}}
{"actor":{"display_login":"bluesjjw"}}