andygrant / openbench Goto Github PK
View Code? Open in Web Editor NEWOpenBench is a Distributed SPRT Testing Framework for Chess Engines
License: GNU General Public License v3.0
OpenBench is a Distributed SPRT Testing Framework for Chess Engines
License: GNU General Public License v3.0
With the current source, after doing the recommended setup steps for the server in README.md, I am getting this exception after logging in as admin:
Request Method: | GET |
---|---|
http://192.168.0.71:8000/ | |
2.0.6 | |
OperationalError | |
no such column: OpenBench_profile.engine | |
/home/jdart/.local/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py in execute, line 303 | |
/usr/bin/python3 | |
3.6.9 | |
['/home/jdart/chess/OpenBench', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/jdart/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages'] | |
Sat, 22 Feb 2020 18:13:42 +0000 |
Proposal: replace GAMES_PER_THREAD
byconcurrency * 32
.
This value is a trade-off:
The result of this trade-off should (all else equal) be proportional to the concurrency value.
For single threaded tests, concurrency = threads, and it means:
For 8 threaded tests, concurrency = int(threads / 8), so we have:
It'd be nice if you could add the suffixes _base and _dev for the associated builds so one can understand what's going on:
Started game 6 of 250 (Ethereal 10.86 (POPCNT) vs Ethereal 10.86 (POPCNT))
Finished game 6 (Ethereal 10.86 (POPCNT) vs Ethereal 10.86 (POPCNT)): 1-0 {White wins by adjudication}
Requires resolution of many of the other issues posted here
To remove any oddities for Ethereal's repo setup, have the Client search the engine download for a makefile.
Makefile will still have to support CC=
and EXE=
, parsing for those dynamically may lead to too many issues...
Something as simple as throwing a "*" next to any such tests. I believe crashes and timelosses are only tracked in the result model, and not the overall test stats. To save compute we'll need to either add and set a flag on a test model, or accumulate crashes and timelosses
It's now hard to tell if any engines are left over and running in background.
I now have a user configured and was able to define Minic engine parameters and submit a job. But when I try to use the client I get this
python3 Client/OpenBench.py -U test -P thegoodpassword -S http://127.0.0.1:8000/ -T 1
<Warning> Machine unregistered, will register with Server
Downloading : <!DOCTYPE html><html lang="en"><head><meta content="text/html; charset=utf-8" http-equiv="content-type"/><title>Page not found at //getFiles/</title><meta content="NONE,NOARCHIVE" name="robots"/><style type="text/css">html * { padding:0; margin:0; } body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background:#eee; color:#000; } body>div { border-bottom:1px solid #ddd; } h1 { font-weight:normal; margin-bottom:.4em; } h1 span { font-size:60%; color:#666; font-weight:normal; } table { border:none; border-collapse: collapse; width:100%; } td, th { vertical-align:top; padding:2px 3px; } th { width:12em; text-align:right; color:#666; padding-right:.5em; } #info { background:#f6f6f6; } #info ol { margin: 0.5em 4em; } #info ol li { font-family: monospace; } #summary { background: #ffc; } #explanation { background:#eee; border-bottom: 0px none; }</style></head><body><div id="summary"><h1>Page not found <span>(404)</span></h1><table class="meta"><tbody><tr><th>Request Method:</th><td>GET</td></tr><tr><th>Request URL:</th><td>http://127.0.0.1:8000//getFiles/</td></tr></tbody></table></div><div id="info"><p>Using the URLconf defined in <code>OpenSite.urls</code>, Django tried these URL patterns, in this order:</p><ol><li>admin/</li><li>register/</li><li>login/</li><li>logout/</li><li>viewProfile/</li><li>editProfile/</li><li>index/</li><li>index/<int:page>/</li><li>greens/</li><li>greens/<int:page>/</li><li>search/</li><li>viewUser/<str:username>/</li><li>viewUser/<str:username>/<int:page>/</li><li>users/</li><li>machines/</li><li>eventLog/</li><li>eventLog/<int:page>/</li><li>newTest/</li><li>viewTest/<int:id>/</li><li>editTest/<int:id>/</li><li>approveTest/<int:id>/</li><li>restartTest/<int:id>/</li><li>stopTest/<int:id>/</li><li>deleteTest/<int:id>/</li><li>getFiles/</li><li>getWorkload/</li><li>wrongBench/</li><li>submitNPS/</li><li>submitResults/</li><li></li></ol><p>The current path, <code>/getFiles/</code>, didn't match any of these.</p></div><div id="explanation"><p>You're seeing this error because you have <code>DEBUG = True</code> in your Django settings file. Change that to <code>False</code>, and Django will display a standard 404 page.</p></div></body></html>cutechess-linux
Traceback (most recent call last):
File "Client/OpenBench.py", line 418, in <module>
getCoreFiles()
File "Client/OpenBench.py", line 74, in getCoreFiles
getFile(location + 'cutechess-linux', 'cutechess')
File "Client/OpenBench.py", line 54, in getFile
request = requests.get(url=source, stream=True, timeout=HTTP_TIMEOUT)
File "/usr/lib/python3/dist-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 640, in send
adapter = self.get_adapter(url=request.url)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 731, in get_adapter
raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for
Am i doing something wrong ?
Happening on your 30-core worker too.
Trying to set up my own instance for Minic I'm running on this issue as soon as I try to login with the superadmin account
Django Version: | 2.0.6
DoesNotExist
Profile matching query does not exist.
/home/vivien/.local/lib/python3.7/site-packages/django/db/models/query.py in get, line 403
/usr/bin/python3
3.7.5
Does that ring a bell ?
Filtering by failed gives yellows, while neutral gives red. Should be the other way around.
After some time, all of the Result objects for a given test may be deleted. Leaving only the final results, cutting out the massive amount of data due to the 40+ machines connected. Additionally, the EventLog may also be cleared.
I have been doing this by hand every few months to keep the database small, but each time I forget how to do it.
I am now able to run and debug the client. I'm facing this
<Warning> Server has no workloads for us
But a test is pending. Any clue ?
Weiss is running at 3.1 on WorkerPool 16 threads, and 2.9 on Andrew 32 threads. So a more reasonable value would be 3m, instead of the current 4m (which inflates tc by 33%).
Might be worth checking other engines while at it. I reckon both Ethereal and Demolito should use 1.4m, as for Laser, I don't know, but 625k looks low.
Like it can be done with fishtest? If yes, how?
Firstly it makes sense to have this on the server -- allowing changes without forcing new client versions.
With this, and some makefile changes, the Client may become generalized enough for ALL engines, such that only OpenBench/config.py
need be changed for new engines.
More a feature request than an issue...
It would be great if cutechess would create pgn files of test games and workers would collect, zip and send them to server for download.
There are some really strange results in some tests and I would like to run some evaluation on the pgns to see if its just statistical noise or some real problem of workers.
Example: http://chess.grantnet.us/viewTest/4668/ should be (almost) completely neutral but in this moment:
Andrews worker ist at +1044 -1159 =2725
My worker ist at +772 -647 =1717
Default behavior of requests.get is never, causing worker hanging.
I've added this option on my fork, just looks for a tag if the branch is not found.
Changes
@AndyGrant: your machine stopped this test http://chess.grantnet.us/viewTest/4413/ due to invalid bench. both gcc and clang compile fine, and give me the same bench. workerpool also didn't have problems, and he's using an old version of the client (and gcc). did you change the bench parsing logic again ?
Here are the last lines of Demolito's output:
seal : 11c28f6d2b272522
time : 7353ms
nodes : 12681936
nps : 1724729
Add a checksum (generated with some python lib.) to the config file with the books.
Send the checksum with the workload.
Have the worker compute the sum and check ... error out if not matching.
When running the OpenBench.py
client, it downloads the cutechess (linux) executable, and running it throws this error:
./cutechess: error while loading shared libraries: libQtCore.so.4: cannot open shared object file: No such file or directory
It's the cutechess executable hat fails to run on my machine. But my cutechess-cli (which I compiled from source using Qt5) works fine. Are you using a (very) old version that is based on Qt4 ?
PS: For now, I'll just hack the python client to make it use my own cutechess-cli.
Initially did not do this for testing reasons, to avoid flooding DB when testing.
However, OS name changes when doing kernal updates, and forces an error on the server side.
Issues appear when no TC and no Options are specified.
Start of support thread for RubiChess
@lucasart , what time controls and hash settings would you like for Demolito's STC/LTC/SMP testing? Here is the template for Ethereal/Laser
'testmodes' : {
'stc' : { 'threads' : 1, 'hash' : 8, 'timecontrol' : '10.0+0.1' },
'ltc' : { 'threads' : 1, 'hash' : 64, 'timecontrol' : '60.0+0.6' },
'smpstc' : { 'threads' : 8, 'hash' : 64, 'timecontrol' : '5.0+0.05' },
'smpltc' : { 'threads' : 8, 'hash' : 256, 'timecontrol' : '20.0+0.2' },
},
I think priority can be removed, and throughput can be used instead. Example:
PS: The reason why Fishtest has both priority and throughput is historical. Priority was available first, and throughput was invented later.
Tried to run the client, but it crashed:
[lucas@megatron Client]$ python3 ./OpenBench.py -U lucasart -P ********* -S http://chess.grantnet.us/ -T 7
<Warning> Machine unregistered, will register with Server
Downloading : <!DOCTYPE html><html lang="en"><head><meta content="text/html; charset=utf-8" http-equiv="content-type"/><title>Page not found at //getFiles/</title><meta content="NONE,NOARCHIVE" name="robots"/><style type="text/css">html * { padding:0; margin:0; } body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background:#eee; color:#000; } body>div { border-bottom:1px solid #ddd; } h1 { font-weight:normal; margin-bottom:.4em; } h1 span { font-size:60%; color:#666; font-weight:normal; } table { border:none; border-collapse: collapse; width:100%; } td, th { vertical-align:top; padding:2px 3px; } th { width:12em; text-align:right; color:#666; padding-right:.5em; } #info { background:#f6f6f6; } #info ol { margin: 0.5em 4em; } #info ol li { font-family: monospace; } #summary { background: #ffc; } #explanation { background:#eee; border-bottom: 0px none; }</style></head><body><div id="summary"><h1>Page not found <span>(404)</span></h1><table class="meta"><tbody><tr><th>Request Method:</th><td>GET</td></tr><tr><th>Request URL:</th><td>http://chess.grantnet.us//getFiles/</td></tr></tbody></table></div><div id="info"><p>Using the URLconf defined in <code>OpenSite.urls</code>, Django tried these URL patterns, in this order:</p><ol><li>admin/</li><li>register/</li><li>login/</li><li>logout/</li><li>viewProfile/</li><li>editProfile/</li><li>index/</li><li>index/<int:page>/</li><li>greens/</li><li>greens/<int:page>/</li><li>search/</li><li>viewUser/<str:username>/</li><li>viewUser/<str:username>/<int:page>/</li><li>users/</li><li>machines/</li><li>eventLog/</li><li>eventLog/<int:page>/</li><li>newTest/</li><li>viewTest/<int:id>/</li><li>editTest/<int:id>/</li><li>approveTest/<int:id>/</li><li>restartTest/<int:id>/</li><li>stopTest/<int:id>/</li><li>deleteTest/<int:id>/</li><li>getFiles/</li><li>getWorkload/</li><li>wrongBench/</li><li>submitNPS/</li><li>submitResults/</li><li></li></ol><p>The current path, <code>/getFiles/</code>, didn't match any of these.</p></div><div id="explanation"><p>You're seeing this error because you have <code>DEBUG = True</code> in your Django settings file. Change that to <code>False</code>, and Django will display a standard 404 page.</p></div></body></html>cutechess-linux
Traceback (most recent call last):
File "./OpenBench.py", line 418, in <module>
getCoreFiles()
File "./OpenBench.py", line 74, in getCoreFiles
getFile(location + 'cutechess-linux', 'cutechess')
File "./OpenBench.py", line 54, in getFile
request = requests.get(url=source, stream=True, timeout=HTTP_TIMEOUT)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 640, in send
adapter = self.get_adapter(url=request.url)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 731, in get_adapter
raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for '<!DOCTYPE html><html lang="en"><head><meta content="text/html; charset=utf-8" http-equiv="content-type"/><title>Page not found at //getFiles/</title><meta content="NONE,NOARCHIVE" name="robots"/><style type="text/css">html * { padding:0; margin:0; } body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background:#eee; color:#000; } body>div { border-bottom:1px solid #ddd; } h1 { font-weight:normal; margin-bottom:.4em; } h1 span { font-size:60%; color:#666; font-weight:normal; } table { border:none; border-collapse: collapse; width:100%; } td, th { vertical-align:top; padding:2px 3px; } th { width:12em; text-align:right; color:#666; padding-right:.5em; } #info { background:#f6f6f6; } #info ol { margin: 0.5em 4em; } #info ol li { font-family: monospace; } #summary { background: #ffc; } #explanation { background:#eee; border-bottom: 0px none; }</style></head><body><div id="summary"><h1>Page not found <span>(404)</span></h1><table class="meta"><tbody><tr><th>Request Method:</th><td>GET</td></tr><tr><th>Request URL:</th><td>http://chess.grantnet.us//getFiles/</td></tr></tbody></table></div><div id="info"><p>Using the URLconf defined in <code>OpenSite.urls</code>, Django tried these URL patterns, in this order:</p><ol><li>admin/</li><li>register/</li><li>login/</li><li>logout/</li><li>viewProfile/</li><li>editProfile/</li><li>index/</li><li>index/<int:page>/</li><li>greens/</li><li>greens/<int:page>/</li><li>search/</li><li>viewUser/<str:username>/</li><li>viewUser/<str:username>/<int:page>/</li><li>users/</li><li>machines/</li><li>eventLog/</li><li>eventLog/<int:page>/</li><li>newTest/</li><li>viewTest/<int:id>/</li><li>editTest/<int:id>/</li><li>approveTest/<int:id>/</li><li>restartTest/<int:id>/</li><li>stopTest/<int:id>/</li><li>deleteTest/<int:id>/</li><li>getFiles/</li><li>getWorkload/</li><li>wrongBench/</li><li>submitNPS/</li><li>submitResults/</li><li></li></ol><p>The current path, <code>/getFiles/</code>, didn't match any of these.</p></div><div id="explanation"><p>You're seeing this error because you have <code>DEBUG = True</code> in your Django settings file. Change that to <code>False</code>, and Django will display a standard 404 page.</p></div></body></html>cutechess-linux'
Right now the Client can specify a path to compile a given engine. This is useless and requires updates per engine addition. We should store this information on the server and send it with each workload.
This should not impact the old client in any way.
It's 2018 duuude.
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='chess.grantnet.us', port=443):
Max retries exceeded with url: /getFiles/
(Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0000006703F5FA90>:
Failed to establish a new connection:
[WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond',))
There are only a handful of books that people generally care about --
Grab the books from the fishtest setup, and list them in the config file
Change the /newTest/
to present a selection box of books
Need to wrap up OpenBench/views.py
to support paging. When viewing a non-first page we need to exclude the Pending
and Active
lists with some conditionals in Templates/OpenBench/index.html
This was a work around to move the formatting of the stats block into the template tags rather than in the HTML file (ugly).
Needs to be removed for safety reasons before production.
Just for the active workload. If the workload finishes and the server is still dead, just drop the data.
Illegal moves are currently reported as losses. It would be nice to have a illegal move report and even better if we know if the illegal move was from the base version or test version.
To make OpenBench even more easy to use for other engine I can spot a few simple modifications :
Threads=X
(Don't fix space issue)OpenBench/config.py
OpenBench.utils
, add page nums to Index / Event LogEXE=
to READMESo when things went wrong I can know on which machine they happened.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.