Targon (Bittensor Subnet 4) é um mecanismo de verificação determinístico usado para incentivar os mineradores a executar endpoints compatíveis com openai e atender consultas sintéticas e orgânicas.
AVISO: Ao usar este software, você deve concordar com os Termos e Acordos fornecidos no documento de termos e condições. Ao baixar e executar este software, você concorda implicitamente com estes termos e condições.
Para validadores recomendamos um 8xA100, embora também possa ser usado um 1xA100. Planejamos nos concentrar em reduzir esses custos nas próximas atualizações.
Para mineradores, A100 ou H100 são escolhas comuns. O benchmarking cabe ao minerador determinar qual GPU funciona melhor para suas otimizações.
Para executar o Targon, você precisará instalar o PM2 e o pacote Targon. As instruções a seguir se aplicam apenas aos sistemas operacionais Ubuntu. Para o seu sistema operacional específico, consulte a documentação oficial.
Para instalar ou atualizar o nvm, você deve executar o script de instalação. Para fazer isso, você pode baixar e executar o script manualmente ou usar o seguinte comando cURL ou Wget:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
A execução de qualquer um dos comandos acima baixa um script e o executa. O script clona o repositório nvm para /.nvm e tenta adicionar as linhas de origem do trecho abaixo ao arquivo de perfil correto ( /.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
Agora você instalou o PM2.
git clone https://github.com/manifold-inc/targon.git
cd targon
python3 -m pip install -e .
Agora você instalou o Targon. Agora você pode executar um validador ou minerador.
Antes de iniciar ou registrar seu minerador no Targon, primeiro você vai querer executar o VLLM servindo diferentes imagens que os validadores estão solicitando. Você pode encontrar uma lista em https://stats.sybil.com/stats/validator na guia ao vivo. Quanto mais modelos você executar, maior será o seu incentivo.
VLLM é o mecanismo recomendado, porém não é obrigatório. Se você estiver usando VLLM, certifique-se de incluir o sinalizador --return-tokens-as-token-ids
, caso contrário, suas respostas falharão.
Depois de ter um (ou vários) modelos em execução, modifique o código do minerador padrão para fazer proxy para a instância VLLM adequada em cada solicitação. Os verificadores incluirão o cabeçalho X-Targon-Model
para que o nó minerador não precise analisar o corpo real.
No script miner.py
você encontrará uma função chamada list_models
. Para servir vários modelos, você deve:
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
e create_completion
em neurônios/miner.py para rotear para o servidor upstream vllm apropriado com base no modelo (que está nos cabeçalhos ou no parâmetro do modelo da carga útil da solicitação)Aqui está uma dica/snippet de código incompleto para você começar:
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}"
Quando isso estiver concluído, você estará pronto para continuar iniciando seu nó minerador.
A execução de um minerador por meio do PM2 exigirá que a instância do vLLM esteja em execução.
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
Substitua o seguinte pela sua configuração específica:
- [WALLET_NAME]
- [WALLET_HOTKEY]
- [MODEL_ENDPOINT]
- [API_KEY]
- [AXON_PORT]
NOTA: O registro de rastreamento é muito detalhado. Você pode usar --logging.info
para diminuir o inchaço do log.
Adicionalmente:
--no-force-validator-permit [TRUE/FALSE]
é padronizado como false para forçar as solicitações recebidas a terem uma permissão. Defina isso como verdadeiro se estiver tendo problemas para receber solicitações de validadores na rede de 'teste'.
Os validadores são simplesmente executados através do pm2, permitindo reinicializações e atualizações automáticas. Um validador deve ser executado em pelo menos um A100, mas quanto maior, melhor, pois clusters maiores podem lidar com mais modelos. A máquina deve ter nvidia-smi/cuda instalado junto com o docker.
Nenhuma instância vllm necessária
Instância do validador:
pm2 start neurons/validator.py --name validator --interperter python3 -- --wallet.name [WALLET_NAME]
Substitua o seguinte pela sua configuração específica:
- [WALLET_NAME]
default
ou config
.endpoint
: o padrão é https://targon.sybil.com/api/models
. Isso irá imitar o validador múltiplodefault
: execute apenas NousResearch/Meta-Llama-3.1-8B-Instructconfig
: analisa um arquivo de texto chamado models.txt
com uma lista de modelos separados por novas linhasendpoint
. Define o endpoint da API para executar ping na lista de modelos. O padrão é targon hub.Exemplo de arquivo de configuração de modelo
models.txt
NousResearch/Meta-Llama-3.1-8B-Instruct NousResearch/Meta-Llama-3.1-70B-Instruct NousResearch/Meta-Llama-3.1-405B-Instruct
A atualização automática é implementada em targon/utils.py. Isso é para garantir que sua base de código corresponda à versão mais recente no Main do Targon Github Repository.
A atualização automática do validador é implementada e padronizada para ser executada assim que os pesos forem definidos. Para desativar , adicione o sinalizador à sua compilação de linha de comando:
pm2 start neurons/validator.py --name validator --interperter python3 -- --wallet.name [WALLET_NAME] --autoupdate-off
A atualização automática do minerador não está implementada. Os mineiros precisarão verificar o repositório Targon e atualizar-se à medida que novas versões forem lançadas. Se estiver interessado em utilizar o recurso de atualização automática usado pelos validadores, siga as etapas abaixo:
NOTA : Isso não será mantido pela equipe do Manifold Labs.
from targon . updater import autoupdate
if self . config . autoupdate :
autoupdate ( branch = "main" )
O objetivo do hub é fornecer aos validadores uma maneira simples de gerar receita diretamente com a largura de banda do bittensor. Isso foi projetado como um modelo para os validadores criarem seus próprios hubs de marca, no entanto, solicitações pull ainda são incentivadas.
Se estiver interessado em executar sua própria instância do Targon Hub, você precisará adicionar um sinalizador adicional para salvar os registros das respostas dos mineradores em um banco de dados PostgreSQL.
NOTA : Sem sinalizador significa que não há banco de dados!
--database.url [DB_CONNECTION_STRING]
Substitua o seguinte pelo seu URL de conexão específico:
- [DB_CONNECTION_STRING]
Abaixo estão as etapas para criar uma string de conexão Supabase para utilizar este recurso:
Connect
próximo ao canto superior direito da telatransaction
para session
no menu suspenso--database.url
e string de conexãoEntre em contato com a equipe do SN4 para obter ajuda na configuração do hub targon no chat do sn4 ou em nosso discord
pm2 start neurons/validator.py --name validator --interperter python3 -- --wallet.name [WALLET_NAME] --database.url [DB_CONNECTION_STRING]
À medida que o seu validador é executado, você começará a ver registros sendo adicionados ao seu banco de dados Supabase. Isso será diretamente o que seu Targon Hub irá consultar.
Targon usa um novo valor de prova de trabalho interno para verificar as respostas do modelo. Eles são gerados como log-probs e podem ser usados para verificar com alta precisão se uma resposta foi gerada com o modelo solicitado. Usamos isso em combinação com uma versão rápida e lenta de verificação log-prob. As respostas verificadas são pontuadas pela velocidade e consistência da verificação.
Um minerador é um nó responsável por gerar uma saída de uma consulta, tanto orgânica quanto sintética.
Um validador é um nó responsável por verificar a saída de um minerador. O validador enviará uma solicitação compatível com openai para um minerador. O minerador então enviará de volta uma resposta com a saída. O validador usará então os valores de prova de trabalho da resposta para verificar se a resposta de cada minerador é precisa. Os validadores manterão a pontuação do tempo de resposta de cada minerador e usarão suas médias para atribuir pontuações em cada época.
Os validadores podem consultar os mineradores diretamente usando qualquer pacote openai e cabeçalhos Epistula. Abaixo está o padrão para consultar um minerador em 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 )
]
}
),
)
Os mantenedores do projeto reservam-se o direito de avaliar as opiniões dos revisores usando o bom senso e também podem avaliar com base no mérito. Os revisores que demonstraram um compromisso e compreensão mais profundos do projeto ao longo do tempo ou que possuem uma experiência clara no domínio podem naturalmente ter mais peso, como seria de esperar em todas as esferas da vida. Quando um conjunto de patches afetar o código crítico para o consenso, o padrão será muito mais alto em termos de discussão e requisitos de revisão por pares, tendo em mente que os erros podem custar muito caro para a comunidade em geral. Isso inclui a refatoração do código crítico de consenso. Quando um conjunto de patches propõe alterar a sub-rede Targon, ele deve ter sido discutido extensivamente no servidor discord e em outros canais, ser acompanhado por um BIP amplamente discutido e ter um consenso técnico geralmente percebido de ser uma mudança válida com base no julgamento de os mantenedores. Dito isto, a Manifold dá as boas-vindas a todos os PRs para a melhoria da sub-rede e do Bittensor como um todo. Estamos nos esforçando para melhorar a cada intervalo e acreditamos que através da comunicação aberta e do compartilhamento de ideias o sucesso será alcançado.