How I won $1,000 of GPU Credits in RunPod's Virtual Scavenger Hunt
This post details the short but exciting virtual scavenger hunt that I participated in last week, and the various technical challenges involved, along with an exploration of dead-ends and lessons learned.
One week ago, I noticed this tweet:
I will personally hand deliver a 4090 to you if you can solve this. Warning you though, it's hard. 99% probably can't. https://t.co/zRYNtBHkkU
— Luke Piette - run/pod (@LukePiette) April 22, 2024
I will personally hand deliver a 4090 to you if you can solve this. Warning you though, it's hard. 99% probably can't. https://t.co/zRYNtBHkkU
— Luke Piette - run/pod (@LukePiette) April 22, 2024
Intrigued, I decided to give it a try.
The tweet itself was the only clue, and included this video of the great Steve Ballmer:
Between the day’s meetings and regular development work, I decided to try my hand at solving the puzzle.
The Buzz
At about 00:10 into the video you can hear a faint buzzing sound. On my laptop speakers it sounded like a distant series of beeps, but with headphones the sound became more pronounced.
Taking an initial look at the audio’s waveform revealed nothing noteworthy
However, the audio spectrograph view revealed a second clue:
The Number
At this point I began to wonder what I could possibly do with the number 4090,000,000. My initial thoughts were that this was a reference to 4090 Mhz. so I went down that rabbit-hole for a while, given that my only things to work with were a video file and a number - my assumption was the next clue was also hidden in the file.
This resulted in a series of dead-ends:
- Manipulating the audio using combinations of 4090 and 4090 x 10^6
- Staring at the waveform / spectrograph
- Applying a band-pass filter on the audio to see if the buzzes were, in fact, a hidden message that could be heard under different conditions
After a few hours of needless torture, it turns out that all I had to do was visit 4090000000.com.
The Website
The website consists of a single image. For the uninitiated - an image of the cartoon detective “Inspector Gadget”.
The clue here was obvious and, to a large extent unneeded since poking around a webpage using the browser’s development tools (also reachable via “Inspect Element”) is second nature to every web developer.
The console revealed a failing request being triggered on a timer:
The 418 “I am a teapot” error code is a reference to an old April Fool’s joke, and is often used for comedic refrain, but otherwise serves no purpose other than a generic error - every 4xx error code returned by a web server indicates a problem with the request.
The obvious next step here was to inspect the request that was resulting in the error:
The request was made to a different URL, i.e. 4090000000.up.railway.app and submits the data { data: "nothing" }
Unintentional Red Herrings & Requests
At this point I noticed that the original tweet had a few replies about the “Railway” server. This was a mistake, because it ended up throwing me off the natural set of next steps.
🚃 is down
— sarhaan (@sarhaan_g) April 23, 2024
🚃 is down
— sarhaan (@sarhaan_g) April 23, 2024
“🚃 is down” - which I interpreted to mean that “Railway” is down.
At this point it was after work hours in the USA and I wondered if the teapot error was worth chasing or whether I’d end up wasting time over something that I knew to be intermittently faulty, so I gave up for a few hours and kept an eye on the page.
After a while, I DM’ed Runpod on Twitter about the error. A few minutes later I realized that the error was part of the hunt. Other participants fell for this as well, because the eventual winner of the scavenger hunt posted about the error too:
💻still up? getting 418, or is that part of the puzzle?
— ry (@ryancruzb) April 23, 2024
💻still up? getting 418, or is that part of the puzzle?
— ry (@ryancruzb) April 23, 2024
To get the next clue, I had to make the same request to the server, replacing the word “nothing” with nothing, i.e. an empty string
The server returned a cryptic one-word response: “sheet”.
Sheet
Like other participants in the contest, I assumed “sheet” was a reference to the stylesheet of the webpage and spent some time poking around the stylesheet, all of which yielded nothing.
I was also sidetracked by more unintentional red herrings from Twitter once again:
debug=True has been removed, that's all we'll say for now🤐
— RunPod (@runpod_io) April 23, 2024
happy hunting! https://t.co/cdfYd5vZ59
debug=True has been removed, that's all we'll say for now🤐
— RunPod (@runpod_io) April 23, 2024
happy hunting! https://t.co/cdfYd5vZ59
Believing this to be a hint because of the inclusion of “that’s all we’ll say for now”, combined with the uppercase “True”, it made me think of Python / Flask and the Werkzeug console (a debugging tool for python web projects), and so I started to check to see whether this was available at a URL involving the word “sheet”, or at the typical console URLs.
Unfortunately this seems to have been just a reference to cases where some participants had discovered a console and tried to proceed through the scavenger hunt that way, and so it turned out to be an expensive dead-end in terms of time.
I also tried submitting the word "sheet"
as a parameter to the earlier POST
request, which returned nothing of value, and so I abandoned anything related to that.
Faithful to the theme of the clues thus far, the answer turned out to be far simpler in concept - I simply visited the Railway App URL and appended the word “datasheet” to it, yielding:
The Datasheet
At this point, having been guilty of overthinking the previous clues, I sent a DM with what I thought to be the answer - “NVIDIA GeForce RTX 4090” - i.e. the grand prize, and the piece of equipment that the statistics in the “datasheet” referred to.
About a day or so later I got back a reply saying my answer was incorrect. At this point I had already forgotten about the contest and had moved on to different things, and was ready to call it quits and do something else in my spare time.
This was not to be. I decided to go down another rabbit hole by trying to see if the numbers themselves yielded anything of interest.
I tried multiplying 16384 x 24 x 90, yielding 35389440. This number coincidentally corresponded to an error that some users dealt with when working with the “Oobabooga Text Generation WebUI Project”. Runpod also has a Blog Post dedicated to setting up a ChatBot with their Oobabooga ChatBot template. I went down this road for a while, poked around the RunPod blogs, documentation and considered firing up the ChatBot itself, but wisely decided against it.
I also gave “Oobabooga” a try in a DM, but as luck would have it, I didn’t hear back for another day, and it was also the wrong answer.
My other “obvious” guess all this while was a reference to the hint that they gave at the beginning of the hunt which was “developers DM us when you can hear the GPU fans spinning”.
This was one of the first things that came to mind when I saw the “datasheet” but in another fine moment of self-sabotaging stupidity, I thought “surely it can’t be the temperature”, because the datasheet said “max temperature” and not “current temperature”, and so I thought the fans would not spin unless the GPU was “currently” at 90 degrees celsius, and decided that it wasn’t worth another guess by attempting this answer. Nonetheless, after some time spent hitting more dead-ends I gave this answer a last ditch attempt after seeing a hint referencing to “getting warmer” in a subsequent tweet from RunPod.
The next day I heard back saying this was the correct answer, and that I was the third person to complete the hunt, missing out on the two available grand prizes.
Victory
As I await the delicious $1000 of credits in my RunPod account, I’m now contemplating interesting weekend projects that can make effective use of GPU-training or inference. I’m also eager to try out RunPod’s serverless offering.
In the years leading up to 2022, I remember searching far and wide for a service like RunPod which offered serverless GPUs or “cloud functions” where you can simply deposit your container of code or function, and have it execute at the next available GPU cycle in a farm of GPUs, with minimal “cold start” time, and get a response back - something of an “AWS Lambda” for GPUs.
At the time, this was either non-existent, or too expensive. My primary use-case was to be able to provision infrastructure to perform audio / video analysis using GPU inference. My eventual solution was to use AWS Spot EC2 “G” instances for some minimum set of audios and solve the problem that way.
Since then, services like RunPod, Paperspace Gradients, and Vast.ai among others have emerged to fill the massive demand for this type of service.
RTX. It’s Off (a patriotic rant 🇮🇳)
This post wouldn’t be complete without a mini-rant on our government’s stance on taxes and duties, which is kneecapping our country’s future in this sector.
The NVIDIA RTX 4090 is the best consumer-grade GPU on the market today, and retails in the United States starting for approximately $1800 USD. In India, after taxes, duties and margins, retail prices get closer to $2700 USD. This is a device that generates massive amounts of heat (up to 90 degrees C, a number I will probably never forget now), and suffer a heat death like any electronic component, and all things in the universe. Fans try to mitigate this with air circulation, which in a tropical climate like ours, can be less efficient. This makes it a very expensive and risky purchase for the average consumer or business.
For more advanced datacenter-tier GPUs like the NVIDIA H100, retail prices are closer to $40,000 or $50,000, which after taxes and duties, would end up being closer to $70,000.
NVIDIA is a market leader in this space. This is an understatement. Nobody in the world, not even their closest competitors AMD (at this point in time) rank anywhere close to NVIDIA GPUs in terms of compute and efficiency.
By imposing 20% + 18% duties and taxes on these products, our government is thoughtlessly sabotaging perhaps one of the most important sectors for the next 10 years.
To put this into perspective, Mark Zuckerberg’s Meta has already committed spending $9-18bn to buy 350,000 NVIDIA GPUs over the next few months. That’s equivalent to $18-24bn for India if our government keeps its current policies in place.
Perhaps one of the best gifts this country could receive would be a tax holiday, deferment or outright cut to spur this sector, inviting investment and sparking innovation by granting GPU compute to the next generation of Indian technology startups here at home itself.
As our election season draws near, I hope there are competent lobbyists who have the ear of our leaders and can demonstrate the merits of a policy change like this, and how critical it may be for our future at this point in time.