GPGPU (GRID) unlock your nvidia card

Ran across this on my lunch-browse and thought people here might find it interesting. It’s significant in that it could enable GPU virtualization at the host level, enabling sharing of fractional GPU services to guests, etc. Among other things this might enable is 1-GPU systems to run windows guest VMs without full PCI device passthru, which might significantly simplify hardware & software setup.

(Disclaimer: Haven’t tried it yet, just skimmed the README.md and posted the link here.)

3 Likes

It’s neat, but you still need to get the drivers and licensing server from Nvidia.

For full functionality, it’s like $250 per VM per year, or $50 per VM per year for partial functionality.

And doing this probably breaks their EULA for those drivers?

2 Likes

Hi,

Looks like someone hacked the nvidia vgpu driver, added a wrapper and now you can use a consumer geforce card to run several vm’s with vgpu support without buying the expensive cards!

Get the code (before nvidia will force the author to take it down) in the following link: GitHub - DualCoder/vgpu_unlock: Unlock vGPU functionality for consumer grade GPUs.

PS: In order to get the driver itself for the Linux, you’ll need to register and download a 90 day evaluation version from nvidia, here.

1 Like

Awesome! Is there a list of supported PCI ID’s and associated cards somewhere?

It should be there in the link

Wendell is aware, and apparently mentions this in the new vid (the vid is not about the vGPU project which the thread was created about, more the driver change for passed through GPU’s)

1 Like

What are the odds this will work on mobile Nvidia chips? Still can’t get past error 43 on my laptop. Muxless and all that… Hey but works with VFIO Linux.

So, I have a question.

Let’s say I have a Linux host that uses the integrated GPU and the dedicated GPU is passed through to a Windows VM without SR-IOV.

If I stop playing games on Windows and shut down the VM, can I just use the dedicated GPU on Linux, or do I have to install drivers or reconfigure stuff every single time?

There’s a method to bind and unbind a gpu when running a specified vm.

1 Like

In order to determine if a certain GPU supports the vGPU functionality the driver looks at the PCI device ID. This identifier together with the PCI vendor ID is unique for each type of PCI device. In order to enable vGPU support we need to tell the driver that the PCI device ID of the installed GPU is one of the device IDs used by a vGPU capable GPU.

It’s the next generation of Error Code 43 bypass.

1 Like

Featured it in this video: /watch?v=kCNPdih6gbg

1 Like
                // GM107
                if(actual_devid == 0x139a || // GTX 950M
                   actual_devid == 0x13bc || // Quadro K1200
                   actual_devid == 0x13b6) { // Quadro M1200
                    spoofed_devid = 0x13bd; // Tesla M10
                }
                // GK104 (Merged with GM204, Experimental)
                if(actual_devid == 0x1183 || // GTX 660 Ti
                   actual_devid == 0x1189 || // GTX 670
                   actual_devid == 0x1180 || // GTX 680
                   actual_devid == 0x1188 || // GTX 690
                   actual_devid == 0x1187 || // GTX 760 
                   actual_devid == 0x11ba || // Quadro K5000
                // GM204
                   actual_devid == 0x13c3 || // GTX 960 GM204 OEM Edition
                   actual_devid == 0x13d9 || // GTX 965M
                   actual_devid == 0x13d8 || // GTX 970M
                   actual_devid == 0x13c2 || // GTX 970
                   actual_devid == 0x13d7 || // GTX 980M
                   actual_devid == 0x13c0 || // GTX 980
                   actual_devid == 0x13f1 || // Quadro M4000
                   actual_devid == 0x13f0) { // Quadro M5000
                    spoofed_devid = 0x13f2; // Tesla M60
                }
                // GP102
                if(actual_devid == 0x1b00 || // TITAN X (Pascal)
                   actual_devid == 0x1b02 || // TITAN Xp
                   actual_devid == 0x1b06 || // GTX 1080 Ti
                   actual_devid == 0x1b30) { // Quadro P6000
                    spoofed_devid = 0x1b38; // Tesla P40
                }
                // GP107 (Merged with P4)
                if(actual_devid == 0x1cb1 || // Quadro P1000
                // GP106 (Merged with P4, Tested working)
                   actual_devid == 0x1c03 || // GTX 1060 6GB 
                   actual_devid == 0x1c04 || // GTX 1060 5GB 
                   actual_devid == 0x1c02 || // GTX 1060 3GB 
                   actual_devid == 0x1c07 || // P106-100 6GB 
                   actual_devid == 0x1c09 || // P106-90  3GB 
                   actual_devid == 0x1c30 || // Quadro P2000 
                   actual_devid == 0x1c31 || // Quadro P2200
                // GP104
                   actual_devid == 0x1b80 || // GTX 1080
                   actual_devid == 0x1b81 || // GTX 1070
                   actual_devid == 0x1b82 || // GTX 1070 Ti
                   actual_devid == 0x1b83 || // GTX 1060 6GB GP104 Refresh
                   actual_devid == 0x1b84 || // GTX 1060 3GB GP104 Refresh
                   actual_devid == 0x1bb0) { // Quadro P5000
                    spoofed_devid = 0x1bb3; // Tesla P4
                }
                // GV100 (For the one person who owns a Titan Volta)
                if(actual_devid == 0x1d81 || // TITAN V
                   actual_devid == 0x1db6 || // TITAN V CEO Edition 32GB 
                   actual_devid == 0x1dbA) { // Quadro GV100
                    spoofed_devid = 0x1db4; // Tesla V100
                }
                // TU102
                if(actual_devid == 0x1e02 || // TITAN RTX
                   actual_devid == 0x1e04 || // RTX 2080 Ti
                   actual_devid == 0x1e07) { // RTX 2080 Ti Rev. A
                    spoofed_devid = 0x1e30; // Quadro RTX 6000
                    spoofed_subsysid = 0x12ba;
                }
                // TU104
                if(actual_devid == 0x1e81 || // RTX 2080 Super
                   actual_devid == 0x1e82 || // RTX 2080
                   actual_devid == 0x1e84 || // RTX 2070 Super
                   actual_devid == 0x1e87 || // RTX 2080 Rev. A
                   actual_devid == 0x1e89 || // RTX 2060
                   actual_devid == 0x1eb0 || // Quadro RTX 5000
                   actual_devid == 0x1eb1) { // Quadro RTX 4000
                    spoofed_devid = 0x1eb8; // Tesla T4
                }
                // GA102
                if(actual_devid == 0x2204 || // RTX 3090
                   actual_devid == 0x2205 || // RTX 3080 Ti
                   actual_devid == 0x2206) { // RTX 3080
                    spoofed_devid = 0x2235; // RTX A40
                }

From here: vgpu_unlock/vgpu_unlock at master · DualCoder/vgpu_unlock · GitHub

This list probably is subject to change.

2 Likes

Thanks!

0x1183 is GTX 660 ti, supported.
0x1187 is GTX 760, supported.
0x1189 is GTX 670, supported.
I got a GTX 770(devid 0x1184). So close…

It’s possible that they just did not find/test that device ID yet.

It looks like it has settled down a bit in terms of supported device IDs:


                // GM107
                if(actual_devid == 0x1390 || // GTX 845M
                   actual_devid == 0x1391 || // GTX 850M
                   actual_devid == 0x1392 || // GTX 860M
                   actual_devid == 0x139a || // GTX 950M
                   actual_devid == 0x139b || // GTX 960M
                   actual_devid == 0x139c || // GTX 940M
                   actual_devid == 0x139d || // GTX 750 Ti Maxwell
                   actual_devid == 0x179c || // GTX 940MX
                   actual_devid == 0x1380 || // GTX 750 Ti Maxwell
                   actual_devid == 0x1381 || // GTX 750 Maxwell
                   actual_devid == 0x1382 || // GTX 745 Maxwell
                   actual_devid == 0x13b0 || // Quadro M2000 Mobile
                   actual_devid == 0x13b1 || // Quadro M1000 Mobile
                   actual_devid == 0x13b2 || // Quadro M600 Mobile
                   actual_devid == 0x13b3 || // Quadro K2200 Mobile
                   actual_devid == 0x13b4 || // Quadro M620 Mobile
                   actual_devid == 0x13b6 || // Quadro M1200 Mobile
                   actual_devid == 0x13b9 || // NVS 810
                   actual_devid == 0x13ba || // Quadro K2200
                   actual_devid == 0x13bb || // Quadro K620
                   actual_devid == 0x13bc) { // Quadro K1200               
                    spoofed_devid = 0x13bd; // Tesla M10
                }
                // GM204
                if(actual_devid == 0x13c3 || // GTX 960 GM204 OEM Edition
                   actual_devid == 0x13d9 || // GTX 965M
                   actual_devid == 0x13d8 || // GTX 970M
                   actual_devid == 0x13c2 || // GTX 970
                   actual_devid == 0x13d7 || // GTX 980M
                   actual_devid == 0x13c0 || // GTX 980
                   actual_devid == 0x13c1 || // GM204 Unknown
                   actual_devid == 0x13f1 || // Quadro M4000
                   actual_devid == 0x13f0) { // Quadro M5000
                    spoofed_devid = 0x13f2; // Tesla M60
                }
                // GP102
                if(actual_devid == 0x1b00 || // TITAN X (Pascal)
                   actual_devid == 0x1b02 || // TITAN Xp
                   actual_devid == 0x1b06 || // GTX 1080 Ti
                   actual_devid == 0x1b30) { // Quadro P6000
                    spoofed_devid = 0x1b38; // Tesla P40
                }
                // GP108 (Merged with Tesla P4, will move to M10 in future due to 2GB VRAM)
                if(actual_devid == 0x1d01 || // GT 1030
                   actual_devid == 0x1d10 || // MX150 Mobile
                   actual_devid == 0x1d11 || // MX230 Mobile
                   actual_devid == 0x1d12 || // MX150 Mobile
                   actual_devid == 0x1d13 || // MX250 Mobile
                   actual_devid == 0x1d16 || // MX330 Mobile
                // GP107 (Merged with Tesla P4, may move to M10 in future due to low VRAM)
                   actual_devid == 0x1cb1 || // Quadro P1000
                   actual_devid == 0x1c81 || // GTX 1050 2GB
                   actual_devid == 0x1c82 || // GTX 1050 Ti
                   actual_devid == 0x1c83 || // GTX 1050 3GB
                   actual_devid == 0x1c8c || // GTX 1050 Ti Mobile
                   actual_devid == 0x1c8d || // GTX 1050 Mobile
                   actual_devid == 0x1c8f || // GTX 1050 Ti Max-Q
                   actual_devid == 0x1c90 || // MX150 Mobile
                   actual_devid == 0x1c92 || // GTX 1050 Mobile
                   actual_devid == 0x1c94 || // MX350 Mobile
                   actual_devid == 0x1c96 || // MX350 Mobile
                // GP106 (Merged with Tesla P4)
                   actual_devid == 0x1c03 || // GTX 1060 6GB
                   actual_devid == 0x1c04 || // GTX 1060 5GB
                   actual_devid == 0x1c02 || // GTX 1060 3GB
                   actual_devid == 0x1c07 || // P106-100 6GB
                   actual_devid == 0x1c09 || // P106-90  3GB
                   actual_devid == 0x1c22 || // GTX 1050 Mobile
                   actual_devid == 0x1c23 || // GTX 1060 Mobile Rev. 2
                   actual_devid == 0x1c20 || // GTX 1060 Mobile
                   actual_devid == 0x1c21 || // GTX 1050 Ti Mobile
                   actual_devid == 0x1c2d || // GP106M Generic
                   actual_devid == 0x1c60 || // GTX 1060 Mobile 6GB
                   actual_devid == 0x1c61 || // GTX 1050 Ti Mobile
                   actual_devid == 0x1c62 || // GTX 1050 Mobile
                   actual_devid == 0x1c70 || // GP106GL Generic
                   actual_devid == 0x1c30 || // Quadro P2000 
                   actual_devid == 0x1c31 || // Quadro P2200
                // GP104
                   actual_devid == 0x1b80 || // GTX 1080
                   actual_devid == 0x1b81 || // GTX 1070
                   actual_devid == 0x1b82 || // GTX 1070 Ti
                   actual_devid == 0x1b83 || // GTX 1060 6GB GP104 Refresh
                   actual_devid == 0x1b84 || // GTX 1060 3GB GP104 Refresh
                   actual_devid == 0x1b87 || // P104-100 Mining Card
                   actual_devid == 0x1ba0 || // GTX 1080 Mobile
                   actual_devid == 0x1ba1 || // GTX 1070 Mobile
                   actual_devid == 0x1bb0) { // Quadro P5000 (This will be moved to Tesla P6 in the future)
                    spoofed_devid = 0x1bb3; // Tesla P4
                }
                // GV100 (For the one person who owns a Titan Volta)
                if(actual_devid == 0x1d81 || // TITAN V
                   actual_devid == 0x1dba) { // Quadro GV100 32GB
                    spoofed_devid = 0x1db4; // Tesla V100
                }
                // TU102
                if(actual_devid == 0x1e02 || // TITAN RTX
                   actual_devid == 0x1e04 || // RTX 2080 Ti
                   actual_devid == 0x1e07) { // RTX 2080 Ti Rev. A
                    spoofed_devid = 0x1e30; // Quadro RTX 6000
                    spoofed_subsysid = 0x12ba;
                }
                // TU117 (Merged with Tesla T4)
                if(actual_devid == 0x1ff9 || // Quadro T1000 Mobile
                   actual_devid == 0x1f99 || // TU1117 Mobile Unknown
                   actual_devid == 0x1fae || // TU1117GL Unknown
                   actual_devid == 0x1fb8 || // Quadro T2000 Mobile Max-Q
                   actual_devid == 0x1fb9 || // Quadro T1000 Mobile
                   actual_devid == 0x1fbf || // TU1117GL Unknown
                   actual_devid == 0x1f97 || // GeForce MX450
                   actual_devid == 0x1f98 || // GeForce MX450
                   actual_devid == 0x1f9c || // GeForce MX450
                   actual_devid == 0x1fbb || // Quadro T500 Mobile
                   actual_devid == 0x1fd9 || // GeForce GTX 1650 Mobile Refresh
                   actual_devid == 0x1f81 || // TU117 Unknown
                   actual_devid == 0x1f82 || // GeForce GTX 1650
                   actual_devid == 0x1f91 || // GTX 1650 Mobile Max-Q
                   actual_devid == 0x1f92 || // GTX 1650 Mobile
                   actual_devid == 0x1f94 || // GTX 1650 Mobile
                   actual_devid == 0x1f95 || // GTX 1650 Ti Mobile
                   actual_devid == 0x1f96 || // GTX 1650 Mobile Max-Q
                // TU116 (Merged with Tesla T4)
                   actual_devid == 0x2182 || // GTX 1660 Ti
                   actual_devid == 0x2183 || // TU116 Unknown
                   actual_devid == 0x2184 || // GTX 1660
                   actual_devid == 0x2187 || // GTX 1650 SUPER
                   actual_devid == 0x2188 || // GTX 1650
                   actual_devid == 0x2191 || // GTX 1660 Ti Mobile
                   actual_devid == 0x2192 || // GTX 1650 Ti Mobile
                   actual_devid == 0x21ae || // TU116GL Unknown
                   actual_devid == 0x21bf || // TU116GL Unknown
                   actual_devid == 0x21c4 || // GTX 1660 Super
                   actual_devid == 0x21d1 || // GTX 1660 Ti Mobile
                // TU106 (Merged with Tesla T4)
                   actual_devid == 0x1f02 || // RTX 2070 8GB
                   actual_devid == 0x1f04 || // TU106 Unknown
                   actual_devid == 0x1f06 || // RTX 2060 SUPER
                   actual_devid == 0x1f07 || // RTX 2070 Rev. A
                   actual_devid == 0x1f08 || // RTX 2060 6GB
                   actual_devid == 0x1f09 || // GTX 1660 Super
                   actual_devid == 0x1f0a || // GTX 1650
                   actual_devid == 0x1f10 || // RTX 2070 Mobile
                   actual_devid == 0x1f11 || // RTX 2060 Mobile
                   actual_devid == 0x1f12 || // RTX 2060 Mobile Max-Q
                   actual_devid == 0x1f14 || // RTX 2070 Mobile Max-Q
                   actual_devid == 0x1f15 || // RTX 2060 Mobile
                   actual_devid == 0x1f2e || // TU106M Mobile Unknown
                   actual_devid == 0x1f36 || // TU106GLM Mobile Unknown
                   actual_devid == 0x1f42 || // RTX 2060 SUPER
                   actual_devid == 0x1f47 || // RTX 2060 SUPER
                   actual_devid == 0x1f50 || // RTX 2070 Mobile
                   actual_devid == 0x1f51 || // RTX 2060 Mobile
                // TU104
                   actual_devid == 0x1e81 || // RTX 2080 Super
                   actual_devid == 0x1e82 || // RTX 2080
                   actual_devid == 0x1e84 || // RTX 2070 Super
                   actual_devid == 0x1e87 || // RTX 2080 Rev. A
                   actual_devid == 0x1e89 || // RTX 2060
                   actual_devid == 0x1eb0 || // Quadro RTX 5000
                   actual_devid == 0x1eb1) { // Quadro RTX 4000
                    spoofed_devid = 0x1eb8; // Tesla T4
                }
                // GA102
                if(actual_devid == 0x2204 || // RTX 3090
                   actual_devid == 0x2205 || // RTX 3080 Ti
                   actual_devid == 0x2206) { // RTX 3080
                    spoofed_devid = 0x2235; // RTX A40
                }

Kepler cards (gtx 7xx) have been removed as non working, but the majority of the Maxwell and newer cards have been added.

Unfortunatly, I managed to land in the not supported camp with a GM200 card, as it looks like there are no GM200 cards supported officially, so there is no device ID to spoof my card too.

Definitely having slight pangs of regret with the thicc navi purchase now.

2 Likes

Hope they don’t patch them on the new cards:
https://hothardware.com/news/nvidias-entire-geforce-rtx-30-lineup-to-gain-enhanced-eth-crypto-mining-limiter

Also, has anybody tried this. Like how did it go?

We know how well that worked lol

2 Likes

Whys that? Compatability/driver issues?

I ask because I’m kinda hoping to do a all AMD system.

1 Like