In order to evaluate your work locally, you need the GEval tool. There are two ways to get it.
wget https://gonito.net/get/bin/geval chmod u+x geval ./geval --helpoption B — install GEval with Haskell Stack (needs some time and a couple of gigabytes of hard disk space)
First, install Haskell Stack:
curl -sSL https://get.haskellstack.org/ | shand then install GEval itself:
git clone git://gonito.net/geval cd geval stack setup stack install ~/.local/bin/geval --helpFor troubleshooting, see GEval readme.
(GEval will make your life easier, but is not obligatory, so if you have any trouble with installing/running GEval, you can skip this step, for the time being.)
Get your repo $case (appRepoScheme settings) $of SelfHosted $if (not isIDSet || not isSSHUploaded) && isNothing mAltRepoScheme
You need to $if not isIDSet \ set up your ID $if not isSSHUploaded \ and $if not isSSHUploaded \ upload your SSH public key \ (see your account) if you want to have a repo hosted on this instance, then: $maybe altRepoScheme <- mAltRepoScheme
(Depending on your setup, you might need to create the repo at your git server first; remember to initiate it without any commits!)
git clone #{altRepoScheme}#{challengeName challenge} $nothinggit clone --single-branch #{appRepoHost settings}#{shownId}/#{challengeName challenge} # --single-branch was used to speed up the process, but now we need to fix remote branches git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"(Warning about empty repository is expected, don't worry about it.) $maybe altRepoScheme <- mAltRepoScheme ^{externalRepoInfo settings}
cd #{challengeName challenge} git pull #{repoUrl repo} $if isNothing mAltRepoSchemeUsing an external repository
Alternatively, you can use any other Git repo, e.g. GitLab, GitHub or your own repo. ^{externalRepoInfo settings} $of NoInternalGitServer $maybe altRepoScheme <- mAltRepoScheme
Make sure the repo #{altRepoScheme}#{challengeName challenge} exists. Note that it should be created as empty (do not create any default `README.md` file). $nothing
You need to have a repo at some external Git server (e.g. GitHub, GitLab or your own git server) for storing your solution.
Create a repo at your server. It should be created as empty (do **not** create any default `README.md` file).
The repo should contain #{challengeName challenge} as part of its URL (preferably it should be the last part of the URL) ^{externalRepoInfo settings}
$maybe altRepoScheme <- mAltRepoScheme git clone #{altRepoScheme}#{challengeName challenge} $nothing git clone URL_TO_YOUR_REPOcd #{challengeName challenge} git pull #{repoUrl repo} $of BranchesClone the repo:
git clone --single-branch #{repoUrl repo} # --single-branch was used to speed up the process, but now we need to fix remote branches git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" $maybe gitAnnexRemote <- (repoGitAnnexRemote repo)git annex init git annex initremote storage #{gitAnnexRemote} git annex get --from storageWork on your solution
You need to generate your solution for the test set as test-A/out.tsv. It is also recommended to generate the output for the dev set (dev-0/out.tsv).
You can evaluate results for the dev set locally:
cd #{challengeName challenge} geval --test-name dev-0Push your solution to the git repo
Commit and push out.tsv files to your repo. It is also recommended to push your source codes along with out.tsv files.
cd #{challengeName challenge} git checkout -b #{myBranch} # switch to some other branch git add foo.py build.sh # add your source codes git add gonito.yaml # it's a good practice to add metadata file, see below $if isJust (repoGitAnnexRemote repo)# if your output files are large or if they should not pushed to the regular repo (e.g. contain sensitive information): git annex add dev-0/out.tsv test-A/out.tsv git annex copy --to storage # otherwise (e.g. they are just class labels), add the output files in a regular manner: git add dev-0/out.tsv test-A/out.tsv $elsegit add dev-0/out.tsv test-A/out.tsv # add your output filesgit commit -m 'my brilliant solution' $case (appRepoScheme settings) $of SelfHostedgit push origin #{myBranch}Submit your solution to Gonito
Repos hosted on this instance
If you use a repo hosted here, a submission and evaluation is triggered automatically. You'll see the evaluation results in your console while pushing. $of _
git push origin #{myBranch}Submit your solution to Gonito
Integration with external repos
If you use an external repo (e.g. at your own of Gitolite or at GitLab/GitHub), you can configure a webhook. $maybe token <- mToken
Your webook is:
wget --timeout=0 --quiet -O - '#{appRoot settings}/trigger-remotely' --post-data 'token=#{token}&branch=#{myBranch}&challenge=#{challengeName challenge}&url=#{urlToYourRepo}'or you can just use the following URL:
#{appRoot settings}/trigger-remotely-simple/#{token}/#{challengeName challenge}/#{urlToYourRepo}/#{myBranch}Manual submission
In case other methods fail, you can submit your solution manually — go to the submit form.
Submission metadata
Gonito can take the metadata (description, tags, parameters) of a submission from a number of sources (in order of precedence):
- the YAML files specified in the param-files field of the gonito.yaml file
- only applicable for parameters,
- gonito.yaml will be always skipped even if matches a mask given in the param-files field,
- parameters blacklisted in the unwanted-params field of the gonito.yaml file will be discarded;
- gonito.yaml file committed to the repository
- description given in the description field,
- tags given in tags field,
- parameters given in params field,
- names of output files (only for parameters)
- e.g. if the output file is out-epochs=10,learning-rate=0.01.tsv, then parameters epochs=10 and learning-rare=0.01 will be extracted;
- submission form (when submitting manually);
- git commit message
- description taken from the first paragraph
- tags taken from a line starting with tags:
Here is an example of gonito.yaml, in which all metadata could be given (note that you can also add links to external resources using the `links` section):
description: This my brilliant solution tags: \ - neural-network \ - left-to-right params: \ epochs: 10 \ learning-rate: 0.01 unwanted-params: \ - model-file \ - vocab-file param-files: \ - "*.yaml" \ - config/*.yaml links: \ - title: "Some external link" \ url: "https://example.com/foo-bar-baz-123" \ - title: "Yet another link" \ url: "https://example.org/xyz" \ - url: "https://example.net/bare-link-without-text"It might seem a little bit complicated, but you could simply use the method which is the most convenient for you.