Targon (Bittensor Subnet 4) est un mécanisme de vérification déterministe utilisé pour inciter les mineurs à exécuter des points de terminaison compatibles openai et à répondre à des requêtes synthétiques et organiques.
AVIS : En utilisant ce logiciel, vous devez accepter les termes et accords fournis dans le document des termes et conditions. En téléchargeant et en exécutant ce logiciel, vous acceptez implicitement ces termes et conditions.
Pour les validateurs, nous recommandons un 8xA100, bien qu'un 1xA100 puisse également être utilisé. Nous prévoyons de nous concentrer sur la réduction de ces coûts dans les prochaines mises à jour.
Pour les mineurs, les A100 ou H100 sont des choix courants. Il appartient au mineur de déterminer quel GPU fonctionne le mieux pour ses optimisations.
Pour exécuter Targon, vous devrez installer PM2 et le package Targon. Les instructions suivantes s'appliquent uniquement aux systèmes d'exploitation Ubuntu. Pour votre système d'exploitation spécifique, veuillez vous référer à la documentation officielle.
Pour installer ou mettre à jour nvm, vous devez exécuter le script d'installation. Pour ce faire, vous pouvez soit télécharger et exécuter le script manuellement, soit utiliser la commande cURL ou Wget suivante :
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
L'exécution de l'une des commandes ci-dessus télécharge un script et l'exécute. Le script clone le référentiel nvm dans /.nvm et tente d'ajouter les lignes source de l'extrait ci-dessous au fichier de profil correct ( /.bash_profile, ~/.zshrc, ~/.profile ou ~/.bashrc).
export NVM_DIR= " $( [ -z " ${XDG_CONFIG_HOME-} " ] && printf %s " ${HOME} /.nvm " || printf %s " ${XDG_CONFIG_HOME} /nvm " ) "
[ -s " $NVM_DIR /nvm.sh " ] && . " $NVM_DIR /nvm.sh " # This loads nvm
nvm install node
npm install pm2@latest -g
Vous avez maintenant installé PM2.
git clone https://github.com/manifold-inc/targon.git
cd targon
python3 -m pip install -e .
Vous avez maintenant installé Targon. Vous pouvez désormais exécuter un validateur ou un mineur.
Avant de démarrer ou d'enregistrer votre mineur dans Targon, vous souhaiterez d'abord exécuter VLLM au service des différentes images demandées par les validateurs. Vous pouvez trouver une liste sur https://stats.sybil.com/stats/validator sous l'onglet en direct. Plus vous utilisez de modèles, plus votre incitation est élevée.
VLLM est le moteur recommandé, mais il n'est pas obligatoire. Si vous utilisez VLLM, assurez-vous d'inclure l'indicateur --return-tokens-as-token-ids
, sinon vos réponses échoueront.
Une fois que vous avez un (ou plusieurs) modèles en cours d'exécution, modifiez le code du mineur par défaut pour qu'il soit proxy vers l'instance VLLM appropriée à chaque requête. Les vérificateurs incluront l'en-tête X-Targon-Model
afin que le nœud mineur n'ait pas besoin d'analyser le corps réel.
Dans le script miner.py
vous trouverez une fonction appelée list_models
. Pour servir plusieurs modèles, vous devez :
async def list_models(self):
return [
"ExampleName/Meta-Llama-3.1-8B-Instruct",
"ExampleName/mythomax-l2-13b",
"ExampleName/Hermes-3-Llama-3.1-8B",
"ExampleName/Nxcode-CQ-7B-orpo",
"ExampleName/deepseek-coder-33b-instruct",
"ExampleName/Llama-3.1-Nemotron-70B-Instruct-HF",
]
create_chat_completion
et create_completion
dans neurons/miner.py pour acheminer vers le serveur vllm en amont approprié en fonction du modèle (qui se trouve soit dans les en-têtes, soit à partir du paramètre de modèle de la charge utile de la demande)Voici un extrait de code indice/incomplet pour vous aider à démarrer :
model_port_map = {
'ExampleName/mythomax-l2-13b': 1001,
'ExampleName/Hermes-3-Llama-3.1-8B': 1002,
'ExampleName/Nxcode-CQ-7B-orpo': 1003,
'ExampleName/deepseek-coder-33b-instruct': 1004,
'ExampleName/Llama-3.1-Nemotron-70B-Instruct-HF': 1005
}
full_url = f"http://127.0.0.1:{model_port_map.get(body.get('model'), 1000)}{path}"
Une fois cette opération terminée, vous êtes prêt à continuer à démarrer votre nœud mineur.
L’exécution d’un mineur via PM2 nécessitera l’exécution de l’instance vLLM.
pm2 start neurons/miner.py --name miner --interpreter python3 -- --wallet.name [WALLET_NAME] --netuid 4 --wallet.hotkey [WALLET_HOTKEY] --subtensor.network finney --model-endpoint [MODEL_ENDPOINT] --api_key [API_KEY] --axon.port [AXON PORT] --logging.trace
Veuillez remplacer ce qui suit par votre configuration spécifique :
- [WALLET_NAME]
- [WALLET_HOTKEY]
- [MODEL_ENDPOINT]
- [API_KEY]
- [AXON_PORT]
REMARQUE : La journalisation des traces est très détaillée. Vous pouvez utiliser --logging.info
à la place pour réduire la surcharge des journaux.
En plus:
--no-force-validator-permit [TRUE/FALSE]
est par défaut false pour forcer les demandes entrantes à obtenir un permis. Définissez ceci sur true si vous rencontrez des difficultés pour recevoir les requêtes des validateurs sur le réseau « test ».
Les validateurs sont simplement exécutés via pm2, permettant des redémarrages et des mises à jour automatiques. Un validateur doit être exécuté sur au moins un A100, mais plus il est grand, mieux c'est, car les clusters plus grands peuvent gérer plus de modèles. La machine doit avoir nvidia-smi/cuda installé avec Docker.
Aucune instance vllm nécessaire
Instance du validateur :
pm2 start neurons/validator.py --name validator --interperter python3 -- --wallet.name [WALLET_NAME]
Veuillez remplacer ce qui suit par votre configuration spécifique :
- [WALLET_NAME]
default
ou config
.endpoint
: la valeur par défaut est https://targon.sybil.com/api/models
. Cela imitera le validateur de collecteurdefault
: exécutez uniquement NousResearch/Meta-Llama-3.1-8B-Instructconfig
: analyse un fichier texte nommé models.txt
avec une liste de modèles séparés par des nouvelles lignesendpoint
. Définit le point de terminaison de l'API pour envoyer une requête ping à la liste des modèles. La valeur par défaut est le hub Targon.Exemple de fichier de configuration de modèle
models.txt
NousResearch/Meta-Llama-3.1-8B-Instruct NousResearch/Meta-Llama-3.1-70B-Instruct NousResearch/Meta-Llama-3.1-405B-Instruct
La mise à jour automatique est implémentée dans targon/utils.py. Il s'agit de garantir que votre base de code correspond à la dernière version sur Main du référentiel Targon Github.
La mise à jour automatique du validateur est implémentée et s'exécute par défaut une fois que les poids ont été définis. Pour désactiver , veuillez ajouter l'indicateur à votre build en ligne de commande :
pm2 start neurons/validator.py --name validator --interperter python3 -- --wallet.name [WALLET_NAME] --autoupdate-off
La mise à jour automatique des mineurs n'est pas implémentée. Les mineurs devront vérifier le référentiel Targon et se mettre à jour à mesure que de nouvelles versions sont publiées. Si vous souhaitez utiliser la fonctionnalité de mise à jour automatique utilisée par les validateurs, veuillez suivre les étapes ci-dessous :
REMARQUE : Ceci ne sera pas maintenu par l'équipe de Manifold Labs.
from targon . updater import autoupdate
if self . config . autoupdate :
autoupdate ( branch = "main" )
L'objectif du hub est de donner aux validateurs un moyen simple de générer directement des revenus à partir de leur bande passante bittensor. Ceci est conçu comme un modèle permettant aux validateurs de prendre et de créer leurs propres hubs de marque, mais les demandes d'extraction sont toujours encouragées.
Si vous souhaitez exécuter votre propre instance de Targon Hub, vous devrez ajouter un indicateur supplémentaire pour enregistrer les enregistrements des réponses des mineurs dans une base de données PostgreSQL.
NOTE : Pas de drapeau signifie pas de base de données !
--database.url [DB_CONNECTION_STRING]
Veuillez remplacer ce qui suit par votre URL de connexion spécifique :
- [DB_CONNECTION_STRING]
Vous trouverez ci-dessous les étapes pour créer une chaîne de connexion Supabase afin d'utiliser cette fonctionnalité :
Connect
en haut à droite de l'écran.transaction
en session
dans la liste déroulante--database.url
et la chaîne de connexionVeuillez contacter l'équipe SN4 pour obtenir de l'aide sur la configuration du hub Targon dans le chat SN4 ou sur notre discorde.
pm2 start neurons/validator.py --name validator --interperter python3 -- --wallet.name [WALLET_NAME] --database.url [DB_CONNECTION_STRING]
Au fur et à mesure que votre validateur s'exécute, vous commencerez à voir des enregistrements ajoutés à votre base de données Supabase. Ce sera directement ce que votre Targon Hub interrogera.
Targon utilise une nouvelle valeur de preuve de travail interne pour vérifier les réponses du modèle. Ceux-ci sont générés tout comme les log-probs et peuvent être utilisés pour vérifier avec une grande précision qu'une réponse a été générée avec le modèle demandé. Nous l'utilisons en combinaison avec une version rapide et lente de la vérification des log-prob. Les réponses vérifiées sont notées en fonction de la rapidité et de la cohérence de la vérification.
Un mineur est un nœud chargé de générer un résultat à partir d’une requête, à la fois organique et synthétique.
Un validateur est un nœud chargé de vérifier le résultat d'un mineur. Le validateur enverra une demande conforme à openai à un mineur avec. Le mineur renverra ensuite une réponse avec le résultat. Le validateur utilisera ensuite les valeurs de preuve de travail de la réponse pour vérifier que la réponse de chaque mineur est exacte. Les validateurs conserveront le score du temps de réponse de chaque mineur et utiliseront leurs moyennes pour attribuer des scores à chaque époque.
Les validateurs peuvent interroger les mineurs directement à l'aide de n'importe quel package openai et des en-têtes Epistula. Vous trouverez ci-dessous un modèle pour interroger un mineur en python.
miner = openai . AsyncOpenAI (
base_url = f"http:// { axon . ip } : { axon . port } /v1" ,
api_key = "sn4" ,
max_retries = 0 ,
timeout = Timeout ( 12 , connect = 5 , read = 5 ),
http_client = openai . DefaultAsyncHttpxClient (
event_hooks = {
"request" : [
# This injects Epistula headers right before the request is sent.
# wallet.hotkey is the public / private keypair
#
# You can find this function in the `epistula.py` file in
# the targon repo
create_header_hook ( wallet . hotkey , axon . hotkey_ss58 )
]
}
),
)
Les responsables du projet se réservent le droit de peser les opinions des pairs évaluateurs en faisant preuve de bon sens et peuvent également peser en fonction du mérite. Les évaluateurs qui ont démontré un engagement et une compréhension plus profonds du projet au fil du temps ou qui possèdent une expertise claire dans le domaine peuvent naturellement avoir plus de poids, comme on peut s'y attendre dans tous les domaines. Lorsqu’un ensemble de correctifs affecte du code critique pour le consensus, la barre sera beaucoup plus haute en termes d’exigences de discussion et d’évaluation par les pairs, en gardant à l’esprit que les erreurs pourraient être très coûteuses pour l’ensemble de la communauté. Cela inclut la refactorisation du code critique par consensus. Lorsqu'un ensemble de correctifs propose de modifier le sous-réseau Targon, il doit avoir été longuement discuté sur le serveur Discord et d'autres canaux, être accompagné d'un BIP largement discuté et avoir un consensus technique généralement largement perçu comme étant un changement valable basé sur le jugement de les mainteneurs. Cela étant dit, Manifold accueille tous les PR pour l'amélioration du sous-réseau et de Bittensor dans son ensemble. Nous nous efforçons de nous améliorer à chaque instant et pensons que le succès sera possible grâce à une communication ouverte et au partage d'idées.