{"id":13628539,"url":"https://github.com/andylamp/gpurelperf","last_synced_at":"2026-02-22T02:21:16.907Z","repository":{"id":69326504,"uuid":"138792003","full_name":"andylamp/gpurelperf","owner":"andylamp","description":"A handy utility to find relative GPU performance quickly in multi-gpu boxes","archived":false,"fork":false,"pushed_at":"2018-06-26T21:01:59.000Z","size":13,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-08T19:41:56.259Z","etag":null,"topics":["gpu","load-balancing","mxnet"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andylamp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-06-26T20:51:40.000Z","updated_at":"2020-12-03T08:06:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"7899e56e-8932-4da8-a45f-f9c11bd491c1","html_url":"https://github.com/andylamp/gpurelperf","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andylamp%2Fgpurelperf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andylamp%2Fgpurelperf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andylamp%2Fgpurelperf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andylamp%2Fgpurelperf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andylamp","download_url":"https://codeload.github.com/andylamp/gpurelperf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249315947,"owners_count":21249863,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gpu","load-balancing","mxnet"],"created_at":"2024-08-01T22:00:53.613Z","updated_at":"2026-02-22T02:21:16.872Z","avatar_url":"https://github.com/andylamp.png","language":"Python","funding_links":[],"categories":["\u003ca name=\"Tools\"\u003e\u003c/a\u003e13. Tools"],"sub_categories":["13.4 Parallel and Distributed computing"],"readme":"# GPU relative performance\n\nThis is a solution to a problem that if you probably have not\n even encountered if you are not running a multiple different\n GPU's in one way of another... of course, this package tries\n to solve that!\n \n # First world problems.\n \n Be it for Neural Network training or Mining you need to have\n a way to distribute the load equally to each GPU. For example\n although `mxnet` *supports* multiple GPU's the scheduler currently\n does *not* know the relative performance of each GPU available\n and either you have to do it by hand or a uniform load \n distribution is applied to each GPU (more [here][1]).\n \n # The (quick) solution.\n \n Now, I've thought of how to tackle this problem with \n micro-benchmarks, load measurements and so on... but I like\n the KISS principle and hence I am using something simple with\n minimal overhead which works surprisingly well in practice.\n Basically what I want to accomplish is to get a relative \n performance of each GPU against the lowest performing one\n currently installed; this can be achieved by using \n [Geekbench][2] aggregated CUDA benchmarks scores and construct\n a relative performance index for the currently installed GPU's.\n \n The main gist of this solution is fetch the raw `JSON` CUDA \n benchmark data from Geekbench, parse it, find the GPU's \n installed in the system while matching and normalizing their\n performance using the CUDA benchmark scores. These results\n can then be immediately used in the `mxnet` scheduler as\n percentages.\n \n # Requirements\n \n  Currently this exists as a source distribution and requires `nvidia-smi`\n to be installed -- which if you are using an NVIDIA GPU with either\n Windows or Linux it should already be installed. Roughly, the requirements\n are as follows:\n \n    * Python \u003e 3\n    * Nvidia Drivers (in scope)\n \n Unfortunately, MacOS does not have `nvidia-smi` yet, but a workaround exists \n which I will probably include in a future update.\n \n \n # Usage\n \n Using this package is easy, first of all do:\n \n ```\n $ pip install gpurelperf\n```\n\nThen, after install completes you can use it as a normal package:\n\n```python\nfrom gpurelperf import get_sys_cards\n\nprint(get_sys_cards())\n```\n\n## A quick example with mxnet\n\n```python\nimport mxnet\nfrom gpurelperf import get_sys_cards\n\n# returns a tuple with the ratios\n(wl_list, gfx_list) = get_sys_cards()\n\n# then you would set the work load list as such\nwork_load_list=wl_list\n```\n\n# License\n\nThis project is licensed under the terms and conditions of the Apache 2.0 license.\n \n \n[1]: https://mxnet.incubator.apache.org/faq/multi_devices.html\n[2]: https://browser.geekbench.com/cuda-benchmarks","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandylamp%2Fgpurelperf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandylamp%2Fgpurelperf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandylamp%2Fgpurelperf/lists"}