*[IMPORTANT - Accept the rules before you submit](https://www.aicrowd.com/challenges/neurips-2021-nethack-challenge/challenge_rules)
# Table of Contents
1.[Intro to Nethack and the Nethack Challenge](#intro-to-nethack-and-the-nethack-challenge)
2.[Setting up your codebase](setting-up-your-codebase)
3.[Baselines](baselines)
4.[How to test and debug locally](how-to-test-and-debug-locally)
5.[How to submit](how-to-ssubmit)
# Intro to Nethack and the Nethack Challenge
Your goal is to produce the best possible agent for navigating the depths
of Nethack dungeons and emerging with the Amulet in hand!
You can approach this task however you please, but a good starting point
would be [this notebook](./notebooks/NetHackTutorial.ipynb) which provides
an overview of (1) the many dynamics at play in the game and (2) the
observation and action space with which your agent will interact.
#### A high level description of the Challenge Procedure:
1.**Sign up** to join the competition [on the AIcrowd website](https://www.aicrowd.com/challenges/neurips-2021-nethack-challenge).
2.**Clone** this repo and start developing your solution.
3.**Train** your models on NLE, and ensure run.sh will generate rollouts.
4.**Submit** your trained models to [AIcrowd Gitlab](https://gitlab.aicrowd.com)
for evaluation (full instructions below). The automated evaluation setup
will evaluate the submissions against the NLE environment for a fixed
number of rollouts to compute and report the metrics on the leaderboard
of the competition.

# Setting Up Your Codebase
AIcrowd provides great flexibility in the details of your submission!
Find the answers to FAQs about submissions structure below, followed by
the guide for setting up this starter kit and linking it to the AIcrowd
GitLab.
## FAQs
**How does submission work?**
The submission entrypoint is a bash script `run.sh`. When this script is
called, aicrowd will expect you to generate all your rollouts in the
allotted time, using `aicrowd_gym` in place of regular `gym`. This means
that AIcrowd can make sure everyone is running the same environment,
and can keep score!
**What languages can I use?**
Since the entrypoint is a bash script `run.sh`, you can call any arbitrary
code from this script. However, to get you started, the environment is
set up to generate rollouts in Python.
The repo gives you a template placeholder to load your model
(`agents/your_agent.py`), and a config to chose which agent to load
(`submission_config.py`). You can then test a submission, adding all
AIcrowd’s timeouts on the environment, with `python test_submission.py`
**How do I specify my dependencies?**
We accept submissions with custom runtimes, so you can choose your
favorite! The configuration files typically include `requirements.txt`
(pypi packages), `apt.txt` (apt packages) or even your own `Dockerfile`.
You can check detailed information about the same in the `RUNTIME.md` file.
**How can I get going with an existing baseline?**
The best current baseline is torchbeast baseline. Follow the instructions
[here](/nethack_baselines/torchbeast/) to install and start training
the model (there are even some suggestions for improvements).
To then submit your saved model, simply replace set he `AGENT` in
`submission config` to be `TorchBeastAgent`, and modify the
`agent/torchbeast_agent.py` to point to your saved directory.
You can now test your saved model with `python test_baseline.py`
**How can I get going with a completely new model?**
Train your model as you like, and when you’re ready to submit, just adapt
`YourAgent` in `agents/your_agent.py` to load your model and take a
`batched_step`.
Then just set your `AGENT` in `submission_config.py` to be this class
and you are ready to test with `python test_submission.py`
**How do I actually make a submission?**
The submission is made by adding everything including the model to git,
tagging the submission with a git tag that start `submission-`, and
pushing to AIcrowd's GitLab. The rest is done for you!
More details are available [here](/docs/SUBMISSION.md)
**Are there any hardware or time constraints?**
Your submission will need to complete 128 rollouts in 30 minutes. We will
run 4 of these in parallel, a total of 512 episodes will be used for
evaluation. The episode will timeout and terminate if any action is
left hanging for 300 seconds, or 10,000 steps are taken without
advancing the in game clock.
The machine where the submission will run will have following specifications
* 1 NVIDIA T4 GPU
* 4 vCPUs
* 16 GB RAM
## Setting Up Details
1.**Add your SSH key** to AIcrowd GitLab
You can add your SSH Keys to your GitLab account by going to your profile settings [here](https://gitlab.aicrowd.com/profile/keys). If you do not have SSH Keys, you will first need to [generate one](https://docs.gitlab.com/ee/ssh/README.html#generating-a-new-ssh-key-pair).
4. Run rollouts with a random agent with `python test_submission.py`.
# Baselines
Although we are looking to supply this repository with more baselines throughout the first month of the competition, this repository comes with a strong IMPALA-based baseline in the directory `./nethack_baselines/torchbeast`.
More info on how to install, train and submit that repo are available [here](./nethack_baselines/torchbeast/README.md) - along with some suggestions on where to go next!
# How to Test and Debug Locally
The best way to test your model is to run your submission locally.
You can do this naively by simply running `python rollout.py` or you can simulate the extra timeout wrappers that AIcrowd will implement by using `python test_submission.py`.
# How to Submit
More information on submissions can be found at our [SUBMISSION.md](/docs/SUBMISSION.md)
Find more details on the [original nethack repository](https://github.com/facebookresearch/nle)
...
...
@@ -94,9 +250,8 @@ You can add your SSH Keys to your GitLab account by going to your profile settin
## Install NLE according to the instructions above
```
4. Try out a random agent by setting `AGENT = RandomAgent` in `submission_config.py` and then running`rollout.py`.
4. Try out random rollout script in `rollout.py`.
5. See [this](/nethack_baselines/torchbeast/README.md) for an example of how to train and submit an IMPALA agent. Check out `nethack_baselines` for more examples.
## How do I specify my software runtime / dependencies ? - TODO