Skip to content

Commit 6c98a6f

Browse files
authored
Merge pull request #250 from macrocosm-os/staging
v2.4.0
2 parents 41e4de9 + 29002ea commit 6c98a6f

26 files changed

+317
-306
lines changed

README.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@ bash install.sh
4747

4848
# Compute Requirements
4949

50-
1. To run a **validator**, you will need at least 24GB of VRAM.
51-
2. To run the default huggingface **miner**, you will need at least 18GB of VRAM.
50+
1. To run a **validator**, you will need at least 62GB of VRAM.
51+
2. To run the default huggingface **miner**, you will need at least 62GB of VRAM.
5252

53+
54+
**It is important to note that the baseminers are not recommended for main, and exist purely as an example. Running a base miner on main will result in no emissions and a loss in your registration fee.**
55+
If you have any questions please reach out in the SN1 channel in the Bittensor Discord.
5356
</div>
5457

5558
# How to Run
@@ -77,10 +80,11 @@ For ease of use, you can run the scripts as well with PM2. Installation of PM2 i
7780
sudo apt update && sudo apt install jq && sudo apt install npm && sudo npm install pm2 -g && pm2 update
7881
```
7982

80-
Example of running a SOLAR miner:
83+
Example of running a Llama3 miner:
84+
8185
```bash
82-
pm2 start neurons/miners/huggingface/miner.py --interpreter python3 --name solar_miner -- --netuid 1 --subtensor.network finney --wallet.name my_wallet --wallet.hotkey m1 --neuron.model_id casperhansen/llama-3-70b-instruct-awq --axon.port 21988 --logging.debug
83-
```
86+
pm2 start neurons/miners/huggingface/miner.py --interpreter python3 --name llama3_miner -- --netuid 1 --subtensor.network finney --wallet.name my_wallet --wallet.hotkey m1 --neuron.model_id casperhansen/llama-3-70b-instruct-awq --neuron.load_in_4bit True --axon.port 21988 --logging.debug
87+
```
8488

8589
# Testnet
8690
We highly recommend that you run your miners on testnet before deploying on main. This is give you an opportunity to debug your systems, and ensure that you will not lose valuable immunity time. The SN1 testnet is **netuid 61**.
@@ -90,7 +94,7 @@ In order to run on testnet, you will need to go through the same hotkey registra
9094
To run:
9195

9296
```bash
93-
pm2 start neurons/miners/huggingface/miner.py --interpreter python3 --name solar_miner -- --netuid 61 --subtensor.network test --wallet.name my_test_wallet --wallet.hotkey m1 --neuron.model_id casperhansen/llama-3-70b-instruct-awq --axon.port 21988 --logging.debug
97+
pm2 start neurons/miners/huggingface/miner.py --interpreter python3 --name llama3_miner -- --netuid 61 --subtensor.network test --wallet.name my_test_wallet --wallet.hotkey m1 --neuron.model_id casperhansen/llama-3-70b-instruct-awq --neuron.load_in_4bit True --axon.port 21988 --logging.debug
9498
```
9599

96100
# Limitations

min_compute.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ compute_spec:
2222

2323
gpu:
2424
required: True # Does the application require a GPU?
25-
min_vram: 20 # Minimum GPU VRAM (GB)
26-
recommended_vram: 24 # Recommended GPU VRAM (GB)
25+
min_vram: 62 # Minimum GPU VRAM (GB)
26+
recommended_vram: 80 # Recommended GPU VRAM (GB)
2727
cuda_cores: 1024 # Minimum number of CUDA cores (if applicable)
2828
min_compute_capability: 6.0 # Minimum CUDA compute capability
2929
recommended_compute_capability: 7.0 # Recommended CUDA compute capability
30-
recommended_gpu: "NVIDIA A10" # Recommended GPU to purchase/rent
30+
recommended_gpu: "NVIDIA A100" # Recommended GPU to purchase/rent
3131

3232
memory:
3333
min_ram: 16 # Minimum RAM (GB)
@@ -36,7 +36,7 @@ compute_spec:
3636
ram_type: "DDR4" # RAM type (e.g., DDR4, DDR3, etc.)
3737

3838
storage:
39-
min_space: 24 # Minimum free storage space (GB)
39+
min_space: 60 # Minimum free storage space (GB)
4040
recommended_space: 100 # Recommended free storage space (GB)
4141
type: "SSD" # Preferred storage type (e.g., SSD, HDD)
4242
min_iops: 1000 # Minimum I/O operations per second (if applicable)
@@ -57,7 +57,7 @@ compute_spec:
5757

5858
gpu:
5959
required: True # Does the application require a GPU?
60-
min_vram: 80 # Minimum GPU VRAM (GB)
60+
min_vram: 62 # Minimum GPU VRAM (GB)
6161
recommended_vram: 80 # Recommended GPU VRAM (GB)
6262
cuda_cores: 1024 # Minimum number of CUDA cores (if applicable)
6363
min_compute_capability: 6.0 # Minimum CUDA compute capability
@@ -71,7 +71,7 @@ compute_spec:
7171
ram_type: "DDR4" # RAM type (e.g., DDR4, DDR3, etc.)
7272

7373
storage:
74-
min_space: 40 # Minimum free storage space (GB)
74+
min_space: 60 # Minimum free storage space (GB)
7575
recommended_space: 100 # Recommended free storage space (GB)
7676
type: "SSD" # Preferred storage type (e.g., SSD, HDD)
7777
min_iops: 1000 # Minimum I/O operations per second (if applicable)

prompting/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# DEALINGS IN THE SOFTWARE.
1717

1818
# Define the version of the template module.
19-
__version__ = "2.3.1"
19+
__version__ = "2.4.0"
2020
version_split = __version__.split(".")
2121
__spec_version__ = (
2222
(10000 * int(version_split[0]))

prompting/dendrite.py

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,59 @@
11
import torch
2-
import bittensor as bt
32
from typing import List
3+
from dataclasses import dataclass
4+
from prompting.protocol import StreamPromptingSynapse
5+
from prompting.utils.misc import serialize_exception_to_string
6+
7+
8+
@dataclass
9+
class SynapseStreamResult:
10+
exception: BaseException = None
11+
uid: int = None
12+
accumulated_chunks: List[str] = None
13+
accumulated_chunks_timings: List[float] = None
14+
tokens_per_chunk: List[int] = None
15+
synapse: StreamPromptingSynapse = None
416

517

618
class DendriteResponseEvent:
719
def __init__(
8-
self, responses: List[bt.Synapse], uids: torch.LongTensor, timeout: float
20+
self, stream_results: SynapseStreamResult, uids: torch.LongTensor, timeout: float
921
):
1022
self.uids = uids
1123
self.completions = []
1224
self.status_messages = []
1325
self.status_codes = []
1426
self.timings = []
27+
self.stream_results_uids = []
28+
self.stream_results_exceptions = []
29+
self.stream_results_all_chunks = []
30+
self.stream_results_all_chunks_timings = []
31+
self.stream_results_all_tokens_per_chunk = []
32+
33+
for stream_result in stream_results:
34+
synapse = stream_result.synapse
1535

16-
for synapse in responses:
1736
self.completions.append(synapse.completion)
1837
self.status_messages.append(synapse.dendrite.status_message)
38+
status_code = synapse.dendrite.status_code
1939

20-
if len(synapse.completion) == 0 and synapse.dendrite.status_code == 200:
21-
synapse.dendrite.status_code = 204
40+
if len(synapse.completion) == 0 and status_code == 200:
41+
status_code = 204
2242

23-
self.status_codes.append(synapse.dendrite.status_code)
24-
25-
if (synapse.dendrite.process_time) and (
26-
synapse.dendrite.status_code == 200
27-
or synapse.dendrite.status_code == 204
28-
):
29-
self.timings.append(synapse.dendrite.process_time)
30-
elif synapse.dendrite.status_code == 408:
43+
self.status_codes.append(status_code)
44+
process_time = synapse.dendrite.process_time or 0
45+
if status_code == 200 or status_code == 204:
46+
self.timings.append(process_time)
47+
elif status_code == 408:
3148
self.timings.append(timeout)
3249
else:
33-
self.timings.append(0) # situation where miner is not alive
50+
self.timings.append(0)
3451

35-
self.completions = [synapse.completion for synapse in responses]
36-
self.timings = [
37-
synapse.dendrite.process_time or timeout for synapse in responses
38-
]
39-
self.status_messages = [
40-
synapse.dendrite.status_message for synapse in responses
41-
]
42-
self.status_codes = [synapse.dendrite.status_code for synapse in responses]
52+
self.stream_results_uids.append(stream_result.uid)
53+
self.stream_results_exceptions.append(serialize_exception_to_string(stream_result.exception))
54+
self.stream_results_all_chunks.append(stream_result.accumulated_chunks)
55+
self.stream_results_all_chunks_timings.append(stream_result.accumulated_chunks_timings)
56+
self.stream_results_all_tokens_per_chunk.append(stream_result.tokens_per_chunk)
4357

4458
def __state_dict__(self):
4559
return {
@@ -48,6 +62,11 @@ def __state_dict__(self):
4862
"timings": self.timings,
4963
"status_messages": self.status_messages,
5064
"status_codes": self.status_codes,
65+
"stream_results_uids": self.stream_results_uids,
66+
"stream_results_exceptions": self.stream_results_exceptions,
67+
"stream_results_all_chunks": self.stream_results_all_chunks,
68+
"stream_results_all_chunks_timings": self.stream_results_all_chunks_timings,
69+
"stream_results_all_tokens_per_chunk": self.stream_results_all_tokens_per_chunk,
5170
}
5271

5372
def __repr__(self):

0 commit comments

Comments
 (0)