{"action":"created","comment":{"url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments/206514028","pull_request_review_id":141938153,"id":206514028,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNjUxNDAyOA==","diff_hunk":"@@ -11,127 +11,14 @@\n # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n # See the License for the specific language governing permissions and\n # limitations under the License.\n-\n-import numpy as np\n-import argparse\n-import time\n-import math\n-\n import unittest\n-import os\n-import sys\n-import signal\n-import subprocess\n-\n-\n-class TestDistSeResneXt2x2(unittest.TestCase):\n-    def setUp(self):\n-        self._trainers = 2\n-        self._pservers = 2\n-        self._ps_endpoints = \"127.0.0.1:9123,127.0.0.1:9124\"\n-        self._python_interp = \"python\"\n-\n-    def start_pserver(self):\n-        ps0_ep, ps1_ep = self._ps_endpoints.split(\",\")\n-        ps0_cmd = \"%s dist_se_resnext.py pserver %s 0 %s %d TRUE\" % \\\n-            (self._python_interp, self._ps_endpoints, ps0_ep, self._trainers)\n-        ps1_cmd = \"%s dist_se_resnext.py pserver %s 0 %s %d TRUE\" % \\\n-            (self._python_interp, self._ps_endpoints, ps1_ep, self._trainers)\n-\n-        ps0_proc = subprocess.Popen(\n-            ps0_cmd.split(\" \"), stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n-        ps1_proc = subprocess.Popen(\n-            ps1_cmd.split(\" \"), stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n-        return ps0_proc, ps1_proc\n-\n-    def _wait_ps_ready(self, pid):\n-        retry_times = 20\n-        while True:\n-            assert retry_times >= 0, \"wait ps ready failed\"\n-            time.sleep(3)\n-            try:\n-                # the listen_and_serv_op would touch a file which contains the listen port\n-                # on the /tmp directory until it was ready to process all the RPC call.\n-                os.stat(\"/tmp/paddle.%d.port\" % pid)\n-                return\n-            except os.error:\n-                retry_times -= 1\n-\n-    def test_with_place(self):\n-        # *ATTENTION* THIS TEST NEEDS AT LEAST 2GPUS TO RUN\n-        required_envs = {\n-            \"PATH\": os.getenv(\"PATH\"),\n-            \"PYTHONPATH\": os.getenv(\"PYTHONPATH\"),\n-            \"LD_LIBRARY_PATH\": os.getenv(\"LD_LIBRARY_PATH\"),\n-            \"FLAGS_fraction_of_gpu_memory_to_use\": \"0.15\"\n-        }\n-        # Run local to get a base line\n-        env_local = {\"CUDA_VISIBLE_DEVICES\": \"0\"}\n-        env_local.update(required_envs)\n-        local_cmd = \"%s dist_se_resnext.py trainer %s 0 %s %d FLASE\" % \\\n-            (self._python_interp, \"127.0.0.1:1234\", \"127.0.0.1:1234\", 1)\n-        local_proc = subprocess.Popen(\n-            local_cmd.split(\" \"),\n-            stdout=subprocess.PIPE,\n-            stderr=subprocess.PIPE,\n-            env=env_local)\n-        local_proc.wait()\n-        out, err = local_proc.communicate()\n-        local_ret = out\n-        sys.stderr.write('local_loss: %s\\n' % local_ret)\n-        sys.stderr.write('local_stderr: %s\\n' % err)\n-\n-        # Run dist train to compare with local results\n-        ps0, ps1 = self.start_pserver()\n-        self._wait_ps_ready(ps0.pid)\n-        self._wait_ps_ready(ps1.pid)\n-\n-        ps0_ep, ps1_ep = self._ps_endpoints.split(\",\")\n-        tr0_cmd = \"%s dist_se_resnext.py trainer %s 0 %s %d TRUE\" % \\\n-            (self._python_interp, self._ps_endpoints, ps0_ep, self._trainers)\n-        tr1_cmd = \"%s dist_se_resnext.py trainer %s 1 %s %d TRUE\" % \\\n-            (self._python_interp, self._ps_endpoints, ps1_ep, self._trainers)\n-\n-        env0 = {\"CUDA_VISIBLE_DEVICES\": \"0\"}\n-        env1 = {\"CUDA_VISIBLE_DEVICES\": \"1\"}\n-        env0.update(required_envs)\n-        env1.update(required_envs)\n-        FNULL = open(os.devnull, 'w')\n-\n-        tr0_proc = subprocess.Popen(\n-            tr0_cmd.split(\" \"),\n-            stdout=subprocess.PIPE,\n-            stderr=subprocess.PIPE,\n-            env=env0)\n-        tr1_proc = subprocess.Popen(\n-            tr1_cmd.split(\" \"),\n-            stdout=subprocess.PIPE,\n-            stderr=subprocess.PIPE,\n-            env=env1)\n-\n-        tr0_proc.wait()\n-        tr1_proc.wait()\n-        out, err = tr0_proc.communicate()\n-        sys.stderr.write('dist_stderr: %s\\n' % err)\n-        loss_data0 = out\n-        sys.stderr.write('dist_loss: %s\\n' % loss_data0)\n-        lines = loss_data0.split(\"\\n\")\n-        dist_first_loss = eval(lines[0].replace(\" \", \",\"))[0]\n-        dist_last_loss = eval(lines[1].replace(\" \", \",\"))[0]\n-\n-        local_lines = local_ret.split(\"\\n\")\n-        local_first_loss = eval(local_lines[0])[0]\n-        local_last_loss = eval(local_lines[1])[0]\n+from test_dist_base import TestDistBase\n \n-        self.assertAlmostEqual(local_first_loss, dist_first_loss)\n-        self.assertAlmostEqual(local_last_loss, dist_last_loss)\n \n-        # check tr0_out\n-        # FIXME: ensure the server process is killed\n-        # replace with ps0.terminate()\n-        os.kill(ps0.pid, signal.SIGKILL)\n-        os.kill(ps1.pid, signal.SIGKILL)\n-        FNULL.close()\n+class TestDistSeResneXt2x2(TestDistBase):\n+    def test_se_resnext(self):\n+        # TODO(paddle-dev): Is the delta too large?\n+        self.check_with_place(\"dist_se_resnext.py\", delta=0.2)","path":"python/paddle/fluid/tests/unittests/test_dist_se_resnext.py","position":129,"original_position":129,"commit_id":"12ea358c0699993bc76124535c094c7f535f66f2","original_commit_id":"6e26bfe8efe471e68805c21d9c060f203da28a9c","user":{"login":"panyx0718","id":2887803,"node_id":"MDQ6VXNlcjI4ODc4MDM=","avatar_url":"https://avatars0.githubusercontent.com/u/2887803?v=4","gravatar_id":"","url":"https://api.github.com/users/panyx0718","html_url":"https://github.com/panyx0718","followers_url":"https://api.github.com/users/panyx0718/followers","following_url":"https://api.github.com/users/panyx0718/following{/other_user}","gists_url":"https://api.github.com/users/panyx0718/gists{/gist_id}","starred_url":"https://api.github.com/users/panyx0718/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panyx0718/subscriptions","organizations_url":"https://api.github.com/users/panyx0718/orgs","repos_url":"https://api.github.com/users/panyx0718/repos","events_url":"https://api.github.com/users/panyx0718/events{/privacy}","received_events_url":"https://api.github.com/users/panyx0718/received_events","type":"User","site_admin":false},"body":"Some machine might vary more than 0.2. We should improve it in the future.","created_at":"2018-07-31T12:54:35Z","updated_at":"2018-07-31T12:54:48Z","html_url":"https://github.com/PaddlePaddle/Paddle/pull/12426#discussion_r206514028","pull_request_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments/206514028"},"html":{"href":"https://github.com/PaddlePaddle/Paddle/pull/12426#discussion_r206514028"},"pull_request":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426"}},"in_reply_to_id":206120310},"pull_request":{"url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426","id":204628502,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA0NjI4NTAy","html_url":"https://github.com/PaddlePaddle/Paddle/pull/12426","diff_url":"https://github.com/PaddlePaddle/Paddle/pull/12426.diff","patch_url":"https://github.com/PaddlePaddle/Paddle/pull/12426.patch","issue_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/12426","number":12426,"state":"open","locked":false,"title":"Add transformer dist test and factor out some common utils.","user":{"login":"panyx0718","id":2887803,"node_id":"MDQ6VXNlcjI4ODc4MDM=","avatar_url":"https://avatars0.githubusercontent.com/u/2887803?v=4","gravatar_id":"","url":"https://api.github.com/users/panyx0718","html_url":"https://github.com/panyx0718","followers_url":"https://api.github.com/users/panyx0718/followers","following_url":"https://api.github.com/users/panyx0718/following{/other_user}","gists_url":"https://api.github.com/users/panyx0718/gists{/gist_id}","starred_url":"https://api.github.com/users/panyx0718/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panyx0718/subscriptions","organizations_url":"https://api.github.com/users/panyx0718/orgs","repos_url":"https://api.github.com/users/panyx0718/repos","events_url":"https://api.github.com/users/panyx0718/events{/privacy}","received_events_url":"https://api.github.com/users/panyx0718/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-07-29T07:11:38Z","updated_at":"2018-07-31T12:54:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b3f1225e4176a922238e96120083b0d70b14f15d","assignee":null,"assignees":[],"requested_reviewers":[{"login":"jacquesqiao","id":3048612,"node_id":"MDQ6VXNlcjMwNDg2MTI=","avatar_url":"https://avatars0.githubusercontent.com/u/3048612?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquesqiao","html_url":"https://github.com/jacquesqiao","followers_url":"https://api.github.com/users/jacquesqiao/followers","following_url":"https://api.github.com/users/jacquesqiao/following{/other_user}","gists_url":"https://api.github.com/users/jacquesqiao/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquesqiao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquesqiao/subscriptions","organizations_url":"https://api.github.com/users/jacquesqiao/orgs","repos_url":"https://api.github.com/users/jacquesqiao/repos","events_url":"https://api.github.com/users/jacquesqiao/events{/privacy}","received_events_url":"https://api.github.com/users/jacquesqiao/received_events","type":"User","site_admin":false},{"login":"gongweibao","id":10721757,"node_id":"MDQ6VXNlcjEwNzIxNzU3","avatar_url":"https://avatars3.githubusercontent.com/u/10721757?v=4","gravatar_id":"","url":"https://api.github.com/users/gongweibao","html_url":"https://github.com/gongweibao","followers_url":"https://api.github.com/users/gongweibao/followers","following_url":"https://api.github.com/users/gongweibao/following{/other_user}","gists_url":"https://api.github.com/users/gongweibao/gists{/gist_id}","starred_url":"https://api.github.com/users/gongweibao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gongweibao/subscriptions","organizations_url":"https://api.github.com/users/gongweibao/orgs","repos_url":"https://api.github.com/users/gongweibao/repos","events_url":"https://api.github.com/users/gongweibao/events{/privacy}","received_events_url":"https://api.github.com/users/gongweibao/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426/commits","review_comments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426/comments","review_comment_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/12426/comments","statuses_url":"https://api.github.com/repos/PaddlePaddle/Paddle/statuses/12ea358c0699993bc76124535c094c7f535f66f2","head":{"label":"panyx0718:better_dist_test","ref":"better_dist_test","sha":"12ea358c0699993bc76124535c094c7f535f66f2","user":{"login":"panyx0718","id":2887803,"node_id":"MDQ6VXNlcjI4ODc4MDM=","avatar_url":"https://avatars0.githubusercontent.com/u/2887803?v=4","gravatar_id":"","url":"https://api.github.com/users/panyx0718","html_url":"https://github.com/panyx0718","followers_url":"https://api.github.com/users/panyx0718/followers","following_url":"https://api.github.com/users/panyx0718/following{/other_user}","gists_url":"https://api.github.com/users/panyx0718/gists{/gist_id}","starred_url":"https://api.github.com/users/panyx0718/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panyx0718/subscriptions","organizations_url":"https://api.github.com/users/panyx0718/orgs","repos_url":"https://api.github.com/users/panyx0718/repos","events_url":"https://api.github.com/users/panyx0718/events{/privacy}","received_events_url":"https://api.github.com/users/panyx0718/received_events","type":"User","site_admin":false},"repo":{"id":114556630,"node_id":"MDEwOlJlcG9zaXRvcnkxMTQ1NTY2MzA=","name":"Paddle","full_name":"panyx0718/Paddle","owner":{"login":"panyx0718","id":2887803,"node_id":"MDQ6VXNlcjI4ODc4MDM=","avatar_url":"https://avatars0.githubusercontent.com/u/2887803?v=4","gravatar_id":"","url":"https://api.github.com/users/panyx0718","html_url":"https://github.com/panyx0718","followers_url":"https://api.github.com/users/panyx0718/followers","following_url":"https://api.github.com/users/panyx0718/following{/other_user}","gists_url":"https://api.github.com/users/panyx0718/gists{/gist_id}","starred_url":"https://api.github.com/users/panyx0718/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/panyx0718/subscriptions","organizations_url":"https://api.github.com/users/panyx0718/orgs","repos_url":"https://api.github.com/users/panyx0718/repos","events_url":"https://api.github.com/users/panyx0718/events{/privacy}","received_events_url":"https://api.github.com/users/panyx0718/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/panyx0718/Paddle","description":"PArallel Distributed Deep LEarning","fork":true,"url":"https://api.github.com/repos/panyx0718/Paddle","forks_url":"https://api.github.com/repos/panyx0718/Paddle/forks","keys_url":"https://api.github.com/repos/panyx0718/Paddle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/panyx0718/Paddle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/panyx0718/Paddle/teams","hooks_url":"https://api.github.com/repos/panyx0718/Paddle/hooks","issue_events_url":"https://api.github.com/repos/panyx0718/Paddle/issues/events{/number}","events_url":"https://api.github.com/repos/panyx0718/Paddle/events","assignees_url":"https://api.github.com/repos/panyx0718/Paddle/assignees{/user}","branches_url":"https://api.github.com/repos/panyx0718/Paddle/branches{/branch}","tags_url":"https://api.github.com/repos/panyx0718/Paddle/tags","blobs_url":"https://api.github.com/repos/panyx0718/Paddle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/panyx0718/Paddle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/panyx0718/Paddle/git/refs{/sha}","trees_url":"https://api.github.com/repos/panyx0718/Paddle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/panyx0718/Paddle/statuses/{sha}","languages_url":"https://api.github.com/repos/panyx0718/Paddle/languages","stargazers_url":"https://api.github.com/repos/panyx0718/Paddle/stargazers","contributors_url":"https://api.github.com/repos/panyx0718/Paddle/contributors","subscribers_url":"https://api.github.com/repos/panyx0718/Paddle/subscribers","subscription_url":"https://api.github.com/repos/panyx0718/Paddle/subscription","commits_url":"https://api.github.com/repos/panyx0718/Paddle/commits{/sha}","git_commits_url":"https://api.github.com/repos/panyx0718/Paddle/git/commits{/sha}","comments_url":"https://api.github.com/repos/panyx0718/Paddle/comments{/number}","issue_comment_url":"https://api.github.com/repos/panyx0718/Paddle/issues/comments{/number}","contents_url":"https://api.github.com/repos/panyx0718/Paddle/contents/{+path}","compare_url":"https://api.github.com/repos/panyx0718/Paddle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/panyx0718/Paddle/merges","archive_url":"https://api.github.com/repos/panyx0718/Paddle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/panyx0718/Paddle/downloads","issues_url":"https://api.github.com/repos/panyx0718/Paddle/issues{/number}","pulls_url":"https://api.github.com/repos/panyx0718/Paddle/pulls{/number}","milestones_url":"https://api.github.com/repos/panyx0718/Paddle/milestones{/number}","notifications_url":"https://api.github.com/repos/panyx0718/Paddle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/panyx0718/Paddle/labels{/name}","releases_url":"https://api.github.com/repos/panyx0718/Paddle/releases{/id}","deployments_url":"https://api.github.com/repos/panyx0718/Paddle/deployments","created_at":"2017-12-17T17:48:04Z","updated_at":"2018-07-30T00:53:49Z","pushed_at":"2018-07-31T12:51:44Z","git_url":"git://github.com/panyx0718/Paddle.git","ssh_url":"git@github.com:panyx0718/Paddle.git","clone_url":"https://github.com/panyx0718/Paddle.git","svn_url":"https://github.com/panyx0718/Paddle","homepage":"http://www.paddlepaddle.org/","size":108455,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"PaddlePaddle:develop","ref":"develop","sha":"f372f27e3f724a55ed221f18d3c30b18b4cde8cf","user":{"login":"PaddlePaddle","id":23534030,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTM0MDMw","avatar_url":"https://avatars3.githubusercontent.com/u/23534030?v=4","gravatar_id":"","url":"https://api.github.com/users/PaddlePaddle","html_url":"https://github.com/PaddlePaddle","followers_url":"https://api.github.com/users/PaddlePaddle/followers","following_url":"https://api.github.com/users/PaddlePaddle/following{/other_user}","gists_url":"https://api.github.com/users/PaddlePaddle/gists{/gist_id}","starred_url":"https://api.github.com/users/PaddlePaddle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PaddlePaddle/subscriptions","organizations_url":"https://api.github.com/users/PaddlePaddle/orgs","repos_url":"https://api.github.com/users/PaddlePaddle/repos","events_url":"https://api.github.com/users/PaddlePaddle/events{/privacy}","received_events_url":"https://api.github.com/users/PaddlePaddle/received_events","type":"Organization","site_admin":false},"repo":{"id":65711522,"node_id":"MDEwOlJlcG9zaXRvcnk2NTcxMTUyMg==","name":"Paddle","full_name":"PaddlePaddle/Paddle","owner":{"login":"PaddlePaddle","id":23534030,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIzNTM0MDMw","avatar_url":"https://avatars3.githubusercontent.com/u/23534030?v=4","gravatar_id":"","url":"https://api.github.com/users/PaddlePaddle","html_url":"https://github.com/PaddlePaddle","followers_url":"https://api.github.com/users/PaddlePaddle/followers","following_url":"https://api.github.com/users/PaddlePaddle/following{/other_user}","gists_url":"https://api.github.com/users/PaddlePaddle/gists{/gist_id}","starred_url":"https://api.github.com/users/PaddlePaddle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PaddlePaddle/subscriptions","organizations_url":"https://api.github.com/users/PaddlePaddle/orgs","repos_url":"https://api.github.com/users/PaddlePaddle/repos","events_url":"https://api.github.com/users/PaddlePaddle/events{/privacy}","received_events_url":"https://api.github.com/users/PaddlePaddle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PaddlePaddle/Paddle","description":"PArallel Distributed Deep LEarning","fork":false,"url":"https://api.github.com/repos/PaddlePaddle/Paddle","forks_url":"https://api.github.com/repos/PaddlePaddle/Paddle/forks","keys_url":"https://api.github.com/repos/PaddlePaddle/Paddle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PaddlePaddle/Paddle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PaddlePaddle/Paddle/teams","hooks_url":"https://api.github.com/repos/PaddlePaddle/Paddle/hooks","issue_events_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/events{/number}","events_url":"https://api.github.com/repos/PaddlePaddle/Paddle/events","assignees_url":"https://api.github.com/repos/PaddlePaddle/Paddle/assignees{/user}","branches_url":"https://api.github.com/repos/PaddlePaddle/Paddle/branches{/branch}","tags_url":"https://api.github.com/repos/PaddlePaddle/Paddle/tags","blobs_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/refs{/sha}","trees_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PaddlePaddle/Paddle/statuses/{sha}","languages_url":"https://api.github.com/repos/PaddlePaddle/Paddle/languages","stargazers_url":"https://api.github.com/repos/PaddlePaddle/Paddle/stargazers","contributors_url":"https://api.github.com/repos/PaddlePaddle/Paddle/contributors","subscribers_url":"https://api.github.com/repos/PaddlePaddle/Paddle/subscribers","subscription_url":"https://api.github.com/repos/PaddlePaddle/Paddle/subscription","commits_url":"https://api.github.com/repos/PaddlePaddle/Paddle/commits{/sha}","git_commits_url":"https://api.github.com/repos/PaddlePaddle/Paddle/git/commits{/sha}","comments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/comments{/number}","issue_comment_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/comments{/number}","contents_url":"https://api.github.com/repos/PaddlePaddle/Paddle/contents/{+path}","compare_url":"https://api.github.com/repos/PaddlePaddle/Paddle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PaddlePaddle/Paddle/merges","archive_url":"https://api.github.com/repos/PaddlePaddle/Paddle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PaddlePaddle/Paddle/downloads","issues_url":"https://api.github.com/repos/PaddlePaddle/Paddle/issues{/number}","pulls_url":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls{/number}","milestones_url":"https://api.github.com/repos/PaddlePaddle/Paddle/milestones{/number}","notifications_url":"https://api.github.com/repos/PaddlePaddle/Paddle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PaddlePaddle/Paddle/labels{/name}","releases_url":"https://api.github.com/repos/PaddlePaddle/Paddle/releases{/id}","deployments_url":"https://api.github.com/repos/PaddlePaddle/Paddle/deployments","created_at":"2016-08-15T06:59:08Z","updated_at":"2018-07-31T12:51:12Z","pushed_at":"2018-07-31T12:51:46Z","git_url":"git://github.com/PaddlePaddle/Paddle.git","ssh_url":"git@github.com:PaddlePaddle/Paddle.git","clone_url":"https://github.com/PaddlePaddle/Paddle.git","svn_url":"https://github.com/PaddlePaddle/Paddle","homepage":"http://www.paddlepaddle.org/","size":122215,"stargazers_count":7350,"watchers_count":7350,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2003,"mirror_url":null,"archived":false,"open_issues_count":1377,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":2003,"open_issues":1377,"watchers":7350,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426"},"html":{"href":"https://github.com/PaddlePaddle/Paddle/pull/12426"},"issue":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/12426"},"comments":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/issues/12426/comments"},"review_comments":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426/comments"},"review_comment":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/pulls/12426/commits"},"statuses":{"href":"https://api.github.com/repos/PaddlePaddle/Paddle/statuses/12ea358c0699993bc76124535c094c7f535f66f2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"panyx0718"}}