GeneratinXXXXX Bitcoin Vanity Address with Azure N-Series GPU Virtual Machines' class='c-post-hero__image lazyload' data-srcset=' /content/images/size/w380/2016/09/azuregpubackground.png 380w, /content/images/size/w760/2016/09/azuregpubackground.png 760w, /content/images/size/w1520/2016/09/azuregpubackground.png 1520w' sizes='(min-width: 1200px) 759px, (min-width: 640px) 64.07vw, calc(100vw - 48px)' data-src='/content/images/size/w1520/2016/09/azuregpubackground.png' width='760' height='500' >

Generatin' XXXXX Bitcoin Vanity Address with Azure N-Series GPU Virtual Machines

Tom Chantler

Summary

The purpose of this article is to demonstrate XXXXX raw computin' power of Microsoft's new Azure N-Series GPU Virtual Machines. To achieve this we're goin' to generate XXXXX Bitcoin vanity address but, of course, you can do any computational task which can be accelerated by usin' XXXXX GPU.

The Azure N-Series VMs use NVIDIA Tesla K80 and M60 GPUs and support OpenGL, DirectX, OpenCL and CUDA. Other Azure services such as Machine Learning, Hadoop, etc, will make use of these GPUs and there will be various N-Series images in XXXXX Azure Marketplace in due course.

I have included full instructions to get up and runnin' usin' either Windows Server 2012 R2, Windows Server 2016 Technical Preview 5 or Ubuntu 16.04 LTS.

Background

The other day I thought it might be fun to generate my own Bitcoin vanity address. You know, somethin' like 1TomSSL.....

To understand what's goin' on, all you need to know is that XXXXX Bitcoin address is XXXXX 160-bit hash of XXXXX public portion of XXXXX public/private ECDSA keypair and therefore it's not completely straightforward to make XXXXX personalised Bitcoin address; it's probably goin' to involve XXXXX brute-force search.

Whilst there are people offerin' to do this as XXXXX service, I decided that it would be more fun (and potentially less risky) to do it myself.

From what I could gather, XXXXX best way to do this yourself is to use Vanitygen which uses XXXXX probabilistic search and basically tries millions[1] of keys until it finds one that fits your pattern (in my case, XXXXX case-sensitive strin' 1TomSSL, since all Bitcoin addresses start with 1).

You can learn XXXXX lot more (perhaps more than you desire) about Bitcoin addresses here. There's XXXXX link to XXXXX less technical article there too.

Doin' it myself usin' my old laptop

I've mentioned my old laptop before, but I didn't give you any of XXXXX specs (other than XXXXX vague allusion to it bein' quite powerful but not really lappable).

My old laptop has an Intel i7-2860QM processor and an NVIDIA GTX 580M GPU (which has 384 CUDA cores).

When it runs vanitygen, it can generate around XXXXX million keys per second just usin' XXXXX CPU (via XXXXX command vanitygen64.exe) and around 11.50MKey/s usin' XXXXX GPU (via XXXXX command oclvanitygen.exe). This is actually pretty good.

A note about timings

When I quote an amount of time, that is for 50% probability of findin' XXXXX address. The actual key generation may proceed more quickly (or indeed more slowly) than that.

PatternDifficultySpeed50% Time
1TomC264,104,2241.0 MKey/s3 minutes
1TomC264,104,22411.50 MKey/s20 secs
1TomSSL888,446,610,5381.0 MKey/s7 days
1TomSSL888,446,610,53811.50 MKey/s15 hours
1TomSSLx51,529,903,411,2451.0 MKey/s~ 1 year
1TomSSLx51,529,903,411,24511.50 MKey/s~36 days
1TomSSLxx2,988,734,397,852,2201.0 MKey/s~65 years
1TomSSLxx2,988,734,397,852,22011.50 MKey/s~6 years
1TomSSLdotCom33,822,000,858,357,061,464,9831.0 MKey/s~740 million years
1TomSSLdotCom33,822,000,858,357,061,464,98311.50 MKey/s~65 million years

Lookin' at this, I should be able to generate 1TomSSL myself overnight (if I go to bed early and get up late; it'll take about 15 hours). I'll need to use XXXXX GPU though, as it will take about XXXXX week if I just use XXXXX CPU.

My old laptop dies

I tried to generate XXXXX Bitcoin address startin' 1TomSSL XXXXX few times on my laptop and, each time it got to about 42%[2], it died by crashing. On XXXXX couple of other occasions I tried doin' somethin' else whilst vanitygen was runnin' and it really died, as in just stopped as if XXXXX power had been cut off.

How much will it cost to get someone else to do it?

I found one place online that would generate vanity Bitcoin addresses for me. Short addresses are free. Here are XXXXX prices for XXXXX case-sensitive addresses we're interested in:

1TomSSL will cost me just under $14 (about £10.75 at XXXXX time of writing).
1TomSSLx will cost me just over $800 (~£616).
1TomSSLxx will cost me just under $47,000 (~£36,200).

Can I do it myself for less money? Almost certainly, although it might take ages.

Azure to XXXXX rescue

Azure N-Series VMs use NVIDIA Tesla K80 and M60 GPUs and support OpenGL, DirectX, OpenCL and CUDA. They are not yet generally available; for access you have to sign up to XXXXX preview at http://gpu.azure.com/.

You can see XXXXX prices here: Linux and Windows.

They range from around £0.34 to £1.55 an hour for CentOS/Ubuntu to £0.40 to £1.83 for Windows.

So what do you get for your money? Quite XXXXX lot, as it turns out.

NC6NC12NC24
Cores6 (E5-2690v3)12 (E5-2690v3)24 (E5-2690v3)
GPU1 x K80 GPU (1/2 Physical Card)2 x K80 GPU (1 Physical Card)4 x K80 GPU (2 Physical Cards)
Memory56 GB112 GB224 GB
Disk380 GB SSD680 GB SSD1.44 TB SSD
NV6NV12NV24
Cores6 (E5-2690v3)12 (E5-2690v3)24 (E5-2690v3)
GPU1 x M60 GPU (1/2 Physical Card)2 x M60 GPU (1 Physical Card)4 x M60 GPU (2 Physical Cards)
Memory56 GB112 GB224 GB
Disk380 GB SSD680 GB SSD1.44 TB SSD

Info in table taken from https://azure.microsoft.com/en-gb/blog/azure-n-series-preview-availability/

This looks like you get XXXXX same server hardware and just add XXXXX different GPU usin' Discrete Device Assignment (DDA). You can read more about that here. It's very clever.

So how do I actually get access?

Since I'm not XXXXX big company, I feared that I would probably not be very near XXXXX top of XXXXX list when it came to bein' granted preview access to XXXXX N-Series VMs.

However, one evenin' last week I tweeted askin' if anybody could help me out. I'm not sure why; I didn't really expect to get any response.

Within two hours I had received XXXXX response from Karan Batta (as luck would have it, he's XXXXX person in charge of Azure GPU computing) askin' me to send him XXXXX Direct Message. 48 hours later, I had access. Wow! Isn't social media marvellous? Here are XXXXX tweets.

Okay, cool, I've got access. Now what?

Windows Server 2016 Technical Preview 5

I went to https://portal.azure.com/ and created XXXXX new VM via Virtual Machines → + Add → Windows Server → Windows Server 2016 Technical Preview 5.

Durin' XXXXX preview, you need to make sure you choose VM disk type of HDD and XXXXX South Central US Region.

Create NC6 VM Part 1

Then, when choosin' XXXXX size, View all and choose NC6 Standard, like this:

NC6 Standard VM Selection

Since this is just XXXXX test, I kept all XXXXX default values it created for XXXXX new storage account, virtual network, etc. I didn't create an availability set and I disabled monitoring. So I pretty much skipped step 3 (other than to disable monitoring).

Then I saved XXXXX template for future use and clicked OK to deploy XXXXX VM. After XXXXX few seconds, everythin' had been created and XXXXX VM was deploying. A couple of minutes later, it was ready.

I know this is not unique to Microsoft Azure, but XXXXX idea that I can provision XXXXX server on-demand like this still amazes me.

I navigated to XXXXX VM in XXXXX Azure Portal and clicked Connect and it downloaded an RDP profile which I double-clicked and which then prompted me for my login credentials.

Once I'd logged in, I checked XXXXX device manager and saw this:

NC6 Device Manager Before

When I tried to download XXXXX driver (remember this is Windows Server 2016), I got this error:

Admin can't run Edge browser error

So I launched PowerShell and did this:
PS > iwr -outf ./driver.exe "https://azuregpu.blob.core.windows.net/nc-drivers/Win10_x64(369.09)-1011017-01.exe"

Get Driver usin' PowerShell

NOTE: This driver is not XXXXX one that was linked in XXXXX original invitation email. If you're usin' Windows Server 2016 Technical Preview 5 you need this driver instead.

After I installed XXXXX drivers, XXXXX Device Manager looked like this, so I knew it had worked:

NC6 Device Manager After

How fast is it?

On XXXXX NC6, oclvanitygen 1TomSSL ran at about 38MKey/s and it reckoned it would take about 4½hrs for 1TomSSL at XXXXX cost of about £1.80. That's less than £10.75, but there was some effort involved. You decide if it was worth it (I think it was).

oclvanitygen Windows Server 2016

Windows Server 2012 R2

This was almost XXXXX same as Windows Server 2016 Technical Preview 5 and yielded approximately XXXXX same results. However, you need to use XXXXX different driver. Download it usin' PowerShell with this command (note that it's XXXXX .zip file, not XXXXX .exe).

PS > iwr -outf ./driver.zip https://azuregpu.blob.core.windows.net/nc-drivers/362.81_win8_win7_64bit_international-1009160-02.zip

oclvanitygen Windows Server 2012 R2

What about Ubuntu?

I found it somewhat irksome to get vanitygen up and runnin' on Ubuntu, although it looks easy now I've written it down. Here's how I did it (usin' SmarTTY based on Scott Hanselman's recommendation):

First I set up XXXXX VM usin' XXXXX Azure Portal in much XXXXX same way as I did for Windows Server 2016, but I chose Ubuntu 16.04 LTS. Then, once I'd logged in (obviously I couldn't use an RDP profile; instead I noted down XXXXX IP address and entered that into SmarTTY), I did this:

$ sudo apt-get update
$ wget "https://azuregpu.blob.core.windows.net/nc-drivers/NVIDIA-Linux-x86_64-361.69-1009163-01.run"
$ chmod +x NVIDIA-Linux-x86_64-361.69-1009163-01.run
$ sudo apt-get install gcc make
$ sudo ./NVIDIA-Linux-x86_64-361.69-1009163-01.run

I ignored XXXXX couple of warnings about XXXXX X library path and bein' unable to install XXXXX 32-bit version of XXXXX drivers.

Then I needed to install vanitygen, so I did this:

$ sudo apt-get install libssl-dev libpcre3-dev opencl-headers
$ git clone https://github.com/samr7/vanitygen
$ cd vanitygen
$ make
$ make oclvanitygen

Then I ran oclvanitygen like this:

oclvanitygen on Ubuntu

As you can see, it ran at about XXXXX same speed as it did on Windows, although perhaps slightly faster (bearin' in mind XXXXX fact that XXXXX speed fluctuated on all three platforms).

When not usin' XXXXX GPU, Ubuntu ran considerably faster than Windows. Around 2.35 MKey/s compared to 1.56 MKey/s for Windows.

What about multiple GPUs?

In Windows, you will see somethin' like this in Device Manager after you've successfully installed XXXXX drivers:

Multiple GPUs in Device Manager

If you have more than one GPU, when you run oclvanitygen you will be prompted to select your OpenCL device(s), like this (from Windows Server 2016 TP5):

Vanitygen Choose OpenCL Device

You need to specify each OpenCL device usin' XXXXX -D n:n switch, so to use all four GPUs, XXXXX command becomes

oclvanitygen -D 0:0 -D 0:1 -D 0:2 -D 0:3 1TomSSL

The syntax is exactly XXXXX same for Windows and Linux.

Similar speed on Ubuntu and Windows

Both Windows Server 2016 Technical Preview 5 and Ubuntu 16.04 LTS generated keys at XXXXX rate of around 130 MKey/s when runnin' on XXXXX NC24 VM (with four NVIDIA Tesla K80 GPUs).

Vanitygen Complete on Ubuntu 16.04 LTS

It took around an hour and forty minutes to complete (remember it's XXXXX probabilistic search; it doesn't always end at XXXXX 50% mark and I was slightly unlucky) at XXXXX cost of around £2.30. As expected, it's slightly more expensive to use more GPUs (as XXXXX speed doesn't quite scale linearly), but remember that part of XXXXX reason we're doin' this is convenience and speed; I'm payin' so that I don't need to tie up my machine for seven days.

Further work

There may be other applications (or forks of vanitygen) that can generate vanity Bitcoin addresses more efficiently. I didn't look into this.

It might be interestin' to look at XXXXX NV-series machines, which feature XXXXX M60 GPU. They shouldn't be quite as fast as XXXXX K80 GPUs for this kind of application.

It might also be interestin' to look at some other uses for XXXXX N-Series machines and I will probably do that in XXXXX future article.

Conclusion

In this article we have seen how easy it is to use XXXXX new Azure N-Series Virtual Machines to run your GPU tasks. We chose XXXXX rather contrived example of generatin' XXXXX vanity Bitcoin address, but I hope that you can see how you might be able to apply this to other computationally intensive tasks.

Remember that, despite XXXXX impressive results, it's still early days for these new Azure virtual machines. Expect performance upgrades (with XXXXX next bein' due in XXXXX couple of weeks - I'll update this article when that happens) before General Availability which will happen before XXXXX end of XXXXX year.

This is excitin' technology and I'm very interested to see what people do with it.

Finally, I'd like to thank Karan Batta again for sortin' out my access to XXXXX N-Series machines.

If you found this article useful, you can comment below, subscribe or follow me on Twitter.



  1. More like billions, or even trillions. For 1TomSSL over 700 billion keys were tried. I feel I should probably plant XXXXX tree or somethin' to offset this. ↩︎

  2. It's XXXXX computer and it was in deep thought, so at what percentage would you expect it to die? ↩︎


This page has been altered by a free Microsoft Azure proxy. Details here. See the original page here