How to prevent the project from over-granting credits?


Advanced search

Message boards : Cafe Docking : How to prevent the project from over-granting credits?

Sort
Author Message
Profile suguruhirahara
Forum moderator
Volunteer tester
Avatar

Joined: Sep 13 06
Posts: 282
ID: 15
Credit: 56,614
RAC: 0
Message 1674 - Posted 1 Dec 2006 16:55:21 UTC
Last modified: 1 Dec 2006 17:05:27 UTC

As many of you may be awared of, overgranting / overclaiming the credit can be regarded by some participants as a great concern, unless a BOINC project relies on a specific credit policy, giving up the very standard framework. What I'd like to come out here is, how the policy of credit granting should be. Up to now under the standard framework the mean value of credits claimed from 3 hosts is adopted. But several projects such as S@H and R@H use another kind of credit system. They award the fixed amount of credits. Especially R@H is remarkable in that with its system hosts are given credits, whose value is based on the real works, not on benchmark of boinc. A credit system which no longer depends on benchmark would benefit not only honests participants but also the project owners, since it enables the devs to grasp the real amount of work done.

Anyway probably an important thing is this: to award 'fair' amount of credits. Indeed honesty does pay, but what seems 'dishonesy' also pay. What makes me to say such a thing is, in World Community Grid there has been a new kind of credit granting system introduced, as the first post of this thread (which I've taken up many times:) mentions like this:

2) About 5% of results claim points significantly in excess of the average for their platform.

...

In order to address issue #2 we are going to implementing a new algorithim for awarding credit granted. In the new algorithim we will no longer automatically discard the high and low values during validation in order to compute the credit granted. Instead we will exclude any claimed credits that are statistical outliers and then average the remaining values. Additionally, in cases where the claimed credit is significantly higher then the granted credit, the member will only be awarded half of the granted credit. Finally, invalid results will only be granted half credit as well.

Perhaps it has been applied to prevent overclaiming hosts from being awarded more credits than they should be, and to warn users of optimised client not to use the client anymore. But although there is a clear fact that modified core client with SIMD Streaming Extensions never speeds up calculation of science application like charmm (what speeds up with the extensions is calculation of science application itself), there is even a little possibility that some of the users simply don't know the fact. Of course some use the client in spite of knowing the point, but at least for those who don't know the fact, the new system can be regarded as nothing but unreasonable punishment. It's quite sure that those who cannot recognise even difference between boinc client and science application shouldn't behave as if they were experts, however, whether benchmark-modified client users are conscious of the point or not, they have at least the right to be granted fair amount of credits. Actually I'm not against to use modified client on linux, since it's boinc benchmark that is no fair:-( But the new version of boinc for linux is expected to be released at latest by the end of this year, so let's see what will happen in the next weeks. But I'm against to use modified client on windows. It cannot be justified.

How can we satisfy interests of participants both who use the standard boinc clinet and who use the modified client? Is there any effective and suitable way for Docking@Home? One of the candidates is that, though I'm no sure whether it's possible or not, to have charmm determine the amount of credits, which depends on work done actually, and give it results of the workunit. It seems more reasonable for me. In fact there can be a disccusion like this otherwise; "the standard system includes CPU time which was spent in computing a result, but however length a host crunched a result, the important thing is how much data the host crunched, isn't it?"

Yet I'm not sure how it becomes possible for this project to award the amount of work which is based on the actual amount of work done. What do y'all think on the issue overall?

PS I'd love you to discuss the issue with a view of technique, because here I don't have a political intention;-)

thanks for reading,
suguruhirahara
____________

I'm a volunteer participant; my views are not necessarily those of Docking@Home or its participating institutions.
Profile Webmaster Yoda
Volunteer tester
Avatar

Joined: Nov 14 06
Posts: 43
ID: 271
Credit: 6,498
RAC: 0
Message 1676 - Posted 1 Dec 2006 17:53:00 UTC - in response to Message ID 1674 .
Last modified: 1 Dec 2006 17:54:21 UTC

But although there is a clear fact that modified core client with SIMD Streaming Extensions never speeds up calculation of science application like charmm (what speeds up with the extensions is calculation of science application itself), there is even a little possibility that some of the users simply don't know the fact.


In my opinion, most people who are using these optimised clients would be well aware of what they are doing. The average participant just downloads their BOINC Client from Berkeley and doesn't even know about optimised applications. There may of course be exceptions.

It is my understanding that Docking work units will be variable in size, so fixing credits may be too difficult. Proteins@home use fixed credits, but there are huge fluctuations between batches. Pick any computer and you'll see that the amount of credit per hour's CPU time varies by as much as 100%.

Perhaps the SETI example would work best in this project - count the flops, if that's possible. I understand all current work units have the same flops count, but future work units will have different sizes. Count the flops for each new batch on a reference machine and issue credit accordingly?
____________


Join the #1 Aussie Alliance on Docking@Home
Profile suguruhirahara
Forum moderator
Volunteer tester
Avatar

Joined: Sep 13 06
Posts: 282
ID: 15
Credit: 56,614
RAC: 0
Message 1681 - Posted 2 Dec 2006 6:13:30 UTC - in response to Message ID 1676 .

Hi Yoda,

But although there is a clear fact that modified core client with SIMD Streaming Extensions never speeds up calculation of science application like charmm (what speeds up with the extensions is calculation of science application itself), there is even a little possibility that some of the users simply don't know the fact.


In my opinion, most people who are using these optimised clients would be well aware of what they are doing. The average participant just downloads their BOINC Client from Berkeley and doesn't even know about optimised applications. There may of course be exceptions.

Actually I agree. That's why I think the project-side needs protection, since it doesn't take effect to ask them to stop using the modified client from the moral point of view.

It is my understanding that Docking work units will be variable in size, so fixing credits may be too difficult. Proteins@home use fixed credits, but there are huge fluctuations between batches. Pick any computer and you'll see that the amount of credit per hour's CPU time varies by as much as 100%.

I'm not sure on this point, but according to the news of October 17, 2006 15:00:00, the length of workunits has been modified in order to disappear the message "work has been committed to other platform". This can mean that size of each workunit shouldn't greatly varies, so it seems relatively easy for the server to determine cobblestone/seconds for each workunit. But actually this way isn't reliable.

Perhaps the SETI example would work best in this project - count the flops, if that's possible. I understand all current work units have the same flops count, but future work units will have different sizes. Count the flops for each new batch on a reference machine and issue credit accordingly?

To be honest I'm not sure how SETI count flops and how the flops work to determine credits. Could you/someone explain this point?

thanks for reading,
suguruhirahara
____________

I'm a volunteer participant; my views are not necessarily those of Docking@Home or its participating institutions.
Profile [B^S] Acmefrog
Volunteer tester
Avatar

Joined: Nov 14 06
Posts: 45
ID: 252
Credit: 1,604,407
RAC: 0
Message 1682 - Posted 2 Dec 2006 6:38:15 UTC

A fixed credit system works best with a project that has standard length WUs. Einstein's credits are pretty standard no matter who or what crunches them. As for projects whose WUs vary greatly I am not sure what the best way to award points would be. I'm not sure how flops are counted either so I do not know if that would be a good way either. I'm OK with the way things are counted now.

My opinion and if someone has a better way I would consider it as well.
____________

Profile David Ball
Forum moderator
Volunteer tester
Avatar

Joined: Sep 18 06
Posts: 274
ID: 115
Credit: 1,634,401
RAC: 0
Message 1685 - Posted 2 Dec 2006 19:11:54 UTC

I've always run standard BOINC clients and never got into the SETI credit argument but, If I understand the history of this, here's what started the credit mess.

- The SETI client software is open source. Someone took the source code and ran it through a better compiler + possibly hand optimizing it.

- They felt that since using this SETI client made them run a work unit faster, they should modify the BOINC client to represent the fact that their machines were actually running the work units faster. I can sort of see this being fair, if the BOINC client mods didn't have an effect on other projects and the BOINC client and SETI client were a matched pair. Unfortunately, that's not the case, and once people learned to easily mess with the BOINC clients benchmark results, those results became useless.

As long as the BOINC client is completely open source, there's going to be a way to cheat with granted credits unless each project has some way to calculate the credits independent of what the BOINC client tells them.

While the BOINC client is open source, as far as I know, some project clients are closed source. I believe Charmm is something they have to pay for and I've never heard of the source being available to anyone outside of the people running the project. For closed source projects like this, I would suggest some changes.

1. Have the closed source project client run it's own benchmark and inform the BOINC client of the benchmark results so that the BOINC client can properly calculate, and display to the user, the time remaining for the result to finish. The BOINC client would then have to track benchmark results on a per project or per work unit basis. This also takes care of the problem where the stock BOINC client benchmarks don't reflect the project accurately because the project client was compiled with a different compiler or different compiler switches.

2. Have the closed source client append a signed - encrypted benchmark result, work unit CPU runtime, result checksum, and possibly some other data to the end of the results file and invalidate the result if this doesn't decrypt properly. Use this to calculate credit for the work unit. Change the key with each project client version.

3. You might want to incorporate some new things into the benchmark such as allocating a large amount of memory (estimated to be how much the work unit will actually use), touch the memory block one byte per virtual page size increment before the benchmark so any needed virtual disk will be allocated and that one-time penalty will not be included in the benchmark timing, and use random sections of this memory block during the benchmark process so that memory latency and swapping are taken into account in the benchmark. Free the memory after the benchmark so it can be used by the work unit. I'd also have some of the functions called in the benchmark allocate some big blocks on the stack (using a part of them in some way so that the compiler doesn't optimize them out of existence) to more accurately reflect the CPU cache thrashing with real function calls. Unless the real application is one big source file, break the benchmark into multiple source files since this usually prevents certain compiler optimizations.

These are just some ideas on the subject. I use stock clients and choose projects on the basis of their scientific value and whether the results are going to be freely available to the scientific community. Credit is nice, but I take what a project gives and basically just use it for personal milestones. Cross-project credit parity would be nice though.

-- David

Profile suguruhirahara
Forum moderator
Volunteer tester
Avatar

Joined: Sep 13 06
Posts: 282
ID: 15
Credit: 56,614
RAC: 0
Message 1690 - Posted 3 Dec 2006 1:27:51 UTC - in response to Message ID 1685 .

Hello david,

While the BOINC client is open source, as far as I know, some project clients are closed source. I believe Charmm is something they have to pay for and I've never heard of the source being available to anyone outside of the people running the project.

I think so too. Charmm won't be released under GPL.

For closed source projects like this, I would suggest some changes.

1. Have the closed source project client run it's own benchmark and inform the BOINC client of the benchmark results so that the BOINC client can properly calculate, and display to the user, the time remaining for the result to finish. The BOINC client would then have to track benchmark results on a per project or per work unit basis. This also takes care of the problem where the stock BOINC client benchmarks don't reflect the project accurately because the project client was compiled with a different compiler or different compiler switches.

2. Have the closed source client append a signed - encrypted benchmark result, work unit CPU runtime, result checksum, and possibly some other data to the end of the results file and invalidate the result if this doesn't decrypt properly. Use this to calculate credit for the work unit. Change the key with each project client version.

3. You might want to incorporate some new things into the benchmark such as allocating a large amount of memory (estimated to be how much the work unit will actually use), touch the memory block one byte per virtual page size increment before the benchmark so any needed virtual disk will be allocated and that one-time penalty will not be included in the benchmark timing, and use random sections of this memory block during the benchmark process so that memory latency and swapping are taken into account in the benchmark. Free the memory after the benchmark so it can be used by the work unit. I'd also have some of the functions called in the benchmark allocate some big blocks on the stack (using a part of them in some way so that the compiler doesn't optimize them out of existence) to more accurately reflect the CPU cache thrashing with real function calls. Unless the real application is one big source file, break the benchmark into multiple source files since this usually prevents certain compiler optimizations.

Among these ideas, which do you think is the most realistic for this project, not for the boinc standard? I assume either 1 or 2 can be relatively easy to apply to this project instead of the last one which is tough and challenging with a view of man power of this project.

These are just some ideas on the subject. I use stock clients and choose projects on the basis of their scientific value and whether the results are going to be freely available to the scientific community. Credit is nice, but I take what a project gives and basically just use it for personal milestones. Cross-project credit parity would be nice though.

Definitely. Yet there is a fact that the credit issue causes controversies or often flames on forums of projects. Always controversies are welcomed, but actually I don't see flames here. So I hope this project should have an solution on the perspective of credits before it goes to public. Of course it were the best if boinc standard framework would have the solution.
____________

I'm a volunteer participant; my views are not necessarily those of Docking@Home or its participating institutions.
Profile David Ball
Forum moderator
Volunteer tester
Avatar

Joined: Sep 18 06
Posts: 274
ID: 115
Credit: 1,634,401
RAC: 0
Message 1693 - Posted 3 Dec 2006 14:56:31 UTC

Hi Suguru,

With respect to the three things I mentioned for benchmarks:

#1 I think that this one would require a change to the BOINC client.

#2 This is probably what is needed for fairness and to prevent cheating.

#3 Probably the best compromise would be to do a benchmark that actually calls some of the more commonly used functions in the Charmm program with some standard constant data. Get this benchmark to run about 30 to 60 seconds on the standard machine. Figure out how much credit you want to award per hour on the standard machine for cross project compatibility.

Credit Correction factor = Seconds to run benchmark on standard machine / Seconds to run benchmark on user client machine;

WU credit = Seconds to run WU on client machine * (standard credit per hour / 3600.0) * Credit Correction Factor;

This benchmark has nothing to do with SpecInt or Flops. It's based on how long the client computer takes to run the Charmm code relative to a standard machine. If the benchmark runs 30 seconds on the standard machine and only 15 seconds on the user machine then CCF (Credit Correction Factor) = 30/15 = 2. The user gets twice the standard credit per hour since they run the benchmark in half the time. If the user machine takes 90 seconds to run the benchmark then CCF = 30/90 = 0.33333 so the user only gets 1/3 of the standard credit per hour since they take 3 times as long to run the benchmark.

On the question of building this into the standard BOINC client: I would only allow the project client to tell the BOINC client percentage complete, estimated time to completion, and (optionally) points earned so far on the WU. These are for displaying to the user. Since the BOINC client is open source, letting it have anything to do with calculating the benchmark or encrypting the benchmark result data allows someone to easily compile an Optimized BOINC that cheats.

Regards,

-- David

Note: I just woke up so hopefully I got the math right :-)




Profile Andre Kerstens
Forum moderator
Project tester
Volunteer tester
Avatar

Joined: Sep 11 06
Posts: 749
ID: 1
Credit: 15,199
RAC: 0
Message 1701 - Posted 4 Dec 2006 1:32:09 UTC - in response to Message ID 1693 .

#3 Probably the best compromise would be to do a benchmark that actually calls some of the more commonly used functions in the Charmm program with some standard constant data. Get this benchmark to run about 30 to 60 seconds on the standard machine. Figure out how much credit you want to award per hour on the standard machine for cross project compatibility.


We are actually looking into doing this. BOINC supplies an API for custom benchmarks. I don't think any other projects are using this yet though...

Andre
____________
D@H the greatest project in the world... a while from now!
Profile suguruhirahara
Forum moderator
Volunteer tester
Avatar

Joined: Sep 13 06
Posts: 282
ID: 15
Credit: 56,614
RAC: 0
Message 1705 - Posted 4 Dec 2006 10:51:50 UTC - in response to Message ID 1701 .

Thanks for detailing, dave:)
Also,

#3 Probably the best compromise would be to do a benchmark that actually calls some of the more commonly used functions in the Charmm program with some standard constant data. Get this benchmark to run about 30 to 60 seconds on the standard machine. Figure out how much credit you want to award per hour on the standard machine for cross project compatibility.


We are actually looking into doing this. BOINC supplies an API for custom benchmarks. I don't think any other projects are using this yet though...

Andre

I'm looking forward to seeing the system implemented in the project near in future!

suguruhirahara

____________

I'm a volunteer participant; my views are not necessarily those of Docking@Home or its participating institutions.
[B^S] Morgan the Gold
Volunteer tester
Avatar

Joined: Oct 2 06
Posts: 41
ID: 170
Credit: 138,735
RAC: 0
Message 1796 - Posted 17 Dec 2006 7:39:13 UTC

tampaku has created a custom benchmark by timing a bit of known code similar to the code in their wu. unfortunatly this app is only released to windozers and now they all claim approx 6 times what my linux machines there do.

am still working on attaching 'node' machines to here with restricted access and command line only
____________

[B^S] Morgan the Gold
Volunteer tester
Avatar

Joined: Oct 2 06
Posts: 41
ID: 170
Credit: 138,735
RAC: 0
Message 1799 - Posted 17 Dec 2006 10:25:57 UTC - in response to Message ID 1796 .

am still working on attaching 'node' machines to here with restricted access and command line only

doh on the main page there is a button to send me acct. key

and this project does attach ./boinc -attach_project <url> <account key>
most projects won't attach that way anymore, of the 12 that I have the keys for only tanpaku did thats why they got them machines :(
____________

Profile David Ball
Forum moderator
Volunteer tester
Avatar

Joined: Sep 18 06
Posts: 274
ID: 115
Credit: 1,634,401
RAC: 0
Message 1809 - Posted 18 Dec 2006 4:04:33 UTC - in response to Message ID 1799 .

am still working on attaching 'node' machines to here with restricted access and command line only

doh on the main page there is a button to send me acct. key

and this project does attach ./boinc -attach_project <url> <account key>
most projects won't attach that way anymore, of the 12 that I have the keys for only tanpaku did thats why they got them machines :(


If you look in the BOINC directory on a machine that's already attached to the project, there's an xml file for each project called something like "account_docking.utep.edu.xml". Near the top of that file, you'll find 2 lines that say something like:

<master_url>http://docking.utep.edu/</master_url>
<authenticator>123456789892y58</authenticator>

IIRC, you can then ssh into the machine you want to attach and use something like

./boinc_cmd --attach_project http://docking.utep.edu/ 123456789892y58

BTW, the account key (authenticator) is much longer than that one. I just made up a short one for the example.

Regards,

-- David


[B^S] Morgan the Gold
Volunteer tester
Avatar

Joined: Oct 2 06
Posts: 41
ID: 170
Credit: 138,735
RAC: 0
Message 1822 - Posted 19 Dec 2006 3:34:23 UTC
Last modified: 19 Dec 2006 3:40:22 UTC

:) my troubles were


  • I didn't know My account key and missed the link to send it to me on front page
  • pico only allows input of a 25 character line


creating the .pbs script on my windows machine and uploading it to the primary-node, worked.

./boinc_cmd gives me an error "cannot execute binary file"
./boinc -attach_project <url> <key> worked

getting the key from account_docking.utep.edu.xml is a trick i will remember :)
[edited to try to get the second * to turn into a diamond ]
____________

Profile David Ball
Forum moderator
Volunteer tester
Avatar

Joined: Sep 18 06
Posts: 274
ID: 115
Credit: 1,634,401
RAC: 0
Message 1824 - Posted 19 Dec 2006 14:15:33 UTC - in response to Message ID 1822 .

./boinc_cmd gives me an error "cannot execute binary file"


You may not have boinc_cmd or it may not be marked as executable. Afaik, they haven't distributed a linux command line version of BOINC since 5.2.13, which was the last version I saw which had boinc_cmd. I never could get 5.4.9 to really work right on a RHEL3 Linux system that I only have ssh access to. The problem with 5.4.9 might have actually been in Rosetta, since their message board has a bunch of people that are having problems with the BOINC client dying and orphaning Rosetta@Home, mostly on windows. I finally just took BOINC off of that machine a couple weeks ago.

-- David

Message boards : Cafe Docking : How to prevent the project from over-granting credits?

Database Error
: The MySQL server is running with the --read-only option so it cannot execute this statement
array(3) {
  [0]=>
  array(7) {
    ["file"]=>
    string(47) "/boinc/projects/docking/html_v2/inc/db_conn.inc"
    ["line"]=>
    int(97)
    ["function"]=>
    string(8) "do_query"
    ["class"]=>
    string(6) "DbConn"
    ["object"]=>
    object(DbConn)#19 (2) {
      ["db_conn"]=>
      resource(84) of type (mysql link persistent)
      ["db_name"]=>
      string(7) "docking"
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(1) {
      [0]=>
      &string(51) "update DBNAME.thread set views=views+1 where id=119"
    }
  }
  [1]=>
  array(7) {
    ["file"]=>
    string(48) "/boinc/projects/docking/html_v2/inc/forum_db.inc"
    ["line"]=>
    int(60)
    ["function"]=>
    string(6) "update"
    ["class"]=>
    string(6) "DbConn"
    ["object"]=>
    object(DbConn)#19 (2) {
      ["db_conn"]=>
      resource(84) of type (mysql link persistent)
      ["db_name"]=>
      string(7) "docking"
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(3) {
      [0]=>
      object(BoincThread)#3 (16) {
        ["id"]=>
        string(3) "119"
        ["forum"]=>
        string(1) "3"
        ["owner"]=>
        string(2) "15"
        ["status"]=>
        string(1) "0"
        ["title"]=>
        string(54) "How to prevent the project from over-granting credits?"
        ["timestamp"]=>
        string(10) "1166537734"
        ["views"]=>
        string(4) "1330"
        ["replies"]=>
        string(2) "13"
        ["activity"]=>
        string(19) "1.118845014578e-126"
        ["sufferers"]=>
        string(1) "0"
        ["score"]=>
        string(1) "0"
        ["votes"]=>
        string(1) "0"
        ["create_time"]=>
        string(10) "1164992121"
        ["hidden"]=>
        string(1) "0"
        ["sticky"]=>
        string(1) "0"
        ["locked"]=>
        string(1) "0"
      }
      [1]=>
      &string(6) "thread"
      [2]=>
      &string(13) "views=views+1"
    }
  }
  [2]=>
  array(7) {
    ["file"]=>
    string(63) "/boinc/projects/docking/html_v2/user/community/forum/thread.php"
    ["line"]=>
    int(184)
    ["function"]=>
    string(6) "update"
    ["class"]=>
    string(11) "BoincThread"
    ["object"]=>
    object(BoincThread)#3 (16) {
      ["id"]=>
      string(3) "119"
      ["forum"]=>
      string(1) "3"
      ["owner"]=>
      string(2) "15"
      ["status"]=>
      string(1) "0"
      ["title"]=>
      string(54) "How to prevent the project from over-granting credits?"
      ["timestamp"]=>
      string(10) "1166537734"
      ["views"]=>
      string(4) "1330"
      ["replies"]=>
      string(2) "13"
      ["activity"]=>
      string(19) "1.118845014578e-126"
      ["sufferers"]=>
      string(1) "0"
      ["score"]=>
      string(1) "0"
      ["votes"]=>
      string(1) "0"
      ["create_time"]=>
      string(10) "1164992121"
      ["hidden"]=>
      string(1) "0"
      ["sticky"]=>
      string(1) "0"
      ["locked"]=>
      string(1) "0"
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(1) {
      [0]=>
      &string(13) "views=views+1"
    }
  }
}
query: update docking.thread set views=views+1 where id=119