Richard wanted me to put this information together regarding the
credit situation at NumberFields over the last couple weeks.
I think it best to break down the events in chronological order,
with a summary at the end. So here goes...
First to set the stage, NumberFields had been using the
credit_from_runtime validator option for many years. It had been
pretty stable with very few complaints from users. Were there
cheaters? Yes, but that was mitigated using the runtime cap.
Then one day I decided to introduce a GPU app...
Episode 1: Credit From Runtime
My biggest concern was producing a robust app and seamlessly
integrating it into the project, but I hadn't considered the credit
system. Well, as I soon learned, credit_from_runtime does not play
well with GPU apps. For one, it could easily be cheated by the GPU
folks - since the GPU version was so much faster, the cap
essentially had no effect. If the GPU had a separate runtime cap,
then the cheating could have been mitigated as before. But even
without the cheating, the GPU FLOPS are way over-estimated and give
outrageously high credits.
Episode 2: Credit New
Due to the problems with credit_from_runtime, we decided to switch
to the default credit system (CreditNew). This resulted in the GPU
version paying out next to nothing. The credit junkies started
going into withdrawls and started leaving to go find their fix
somewhere else. This of course is not good for a project who wants
to retain it's volunteers. I realized CreditNew would take some
time for the averaging to settle; but it did not. Not knowing for
sure if and when the credits would correct themselves, I desperately
switched to the credit_from_wu mechanism. As a side note, I
eventually learned that the stabilization problem was caused by the
runtime outliers, which I had implemented years before and had
forgotten about - the gpu tasks were so fast they were all flagged
as outliers and that of course screwed up CreditNew.
Episode 3: Credit Per WU
In switching to fixed credit per WU, I had to select a value for the
credit. I made the mistake of listening to a credit junkie on the
boards and set the credit/hour to something close to what another
project paid. Big mistake - the credit junkies were high as a kite
(and very quiet), but now the cpu was paying almost 18x what it had
originally. This was clearly unacceptable, so I scaled it back
down. Now cpu credits are in the ballpark of their original value,
gpu credits are significantly lower, and of course the credit
junkies are whining again.
Summary
First, here is a link showing the credit debacle in a graphical
format:
https://boincstats.com/en/stats/122/user/detail/1969/charts
After having fixed the runtime outlier mechanism, the project went
back to using CreditNew.
Anyways, I think Richard's goal for these notes, was not for me to
air my dirty laundry, but to provide a "lessons learned" for future
projects, especially ones with both gpu and cpu apps. So here are
my lessons learned:
1. Never use credit_from_runtime with a gpu app.
2. Use CreditNew if at all possible.
3. Before introducing a gpu app, make sure the runtime outlier
mechanism can handle it (otherwise CreditNew won't function
properly)
4. Dont listen to junkies.
-- Eric