January 17, 2025

Gaianet

Установка собственного домена и подключение нод

Для работы нод через персональный домен необходимы GaiaCredits.

Способы получения GaiaCredits:

  • Бесплатно – 500 GaiaCredits раз в день.
  • Покупка домена и имени – позволяет получить увеличенное количество GaiaCredits сразу.

Механика бонусов за домен:

  • В зависимости от стоимости домена предоставляется дополнительный бонус на фарм поинтов.
  • Чем выше цена домена, тем больше поинтов можно зарабатывать через него.



Можете пропустить этот шаг с покупкой платнго имени и купить сразу домен. после чего получить имя бесплатно.(так же как и платно но у вас должна появиться 100% скидка на имя)

Покупка и настройка домена для работы с нодами

  1. Покупка платного имени
    Перейдите на сайт Gaia Domain Name и приобретите платное имя.
    Используйте промокод RaWyvC для получения дополнительной скидки.
  1. Подтверждение транзакции
    После покупки перейдите в раздел управления активами и дождитесь, пока ваше имя появится в списке.
  2. Настройка домена
    • Нажмите кнопку Launch Domain.
    • Введите название, описание и загрузите фото.
    • Нажмите Next Step.
    • Выберите имя и подтвердите выбор.
    • Выберите единственного доступного провайдера и нажмите Далее.
  3. Покупка домена
    • Для подключения нод необходимо приобрести сам домен.
    • Выберите любой домен по стоимости — чем дороже, тем выше бонус к фарму поинтов и тем больше токенов начисляется за сам домен.
    • Используйте промокод RaWyvC при покупке для дополнительной скидки.
  1. Активация домена
    • Переключайтесь между шагами, пока домен не станет доступным.
    • Выберите его и продолжите настройку.
    • Выберите единственный доступный вариант и перейдите далее.
  1. Выбор модели
    • В разделе 6 выберите Automation и модель Qwen1.5-0.5B-ChatQ5_K_M.
    • Подтвердите все настройки.
  2. Завершение регистрации
    Домен зарегистрирован и готов к использованию.

Проверка статуса домена
Перейдите в раздел управления доменами и убедитесь, что ваш домен успешно запущен.

Переход к серверу и установка ноды
После успешного запуска домена приступаем к установке ноды на сервер.

Шаг 1: Установка необходимых пакетов и зависимостей

0. Убиваем все процессы на порту :8080

sudo fuser -k 8080/tcp

1. Обновите систему и установите необходимые пакеты:

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3-pip python3-dev python3-venv curl git

2. Установите aiohttp и другие зависимости для Python:

 pip3 install aiohttp

3. Установите gaianet и другие зависимости:

curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash
source ~/.bashrc

4. Убедитесь, что на сервере установлены необходимые инструменты:

sudo apt install -y build-essential 
 apt install tmux

Шаг 2: Инициализация и запуск ноды

1. Инициализируйте ноду с конфигурацией выбранной модели:

gaianet init --config https://raw.gaianet.ai/qwen-1.5-0.5b-chat/config.json

Запускаем ноду

gaianet start  

Подключение ноды к домену

  1. Проверка работы ноды
    Если нода выдала ссылку, значит установка выполнена корректно.

Получение идентификаторов ноды
Введите следующую команду в терминале: gaianet info Скопируйте Node ID и Device ID.

  1. Привязка ноды к аккаунту GaiaNet
  2. Присоединение ноды к домену
    • Найдите свою ноду в списке.
    • Нажмите JOIN DOMAIN, чтобы подключить её к зарегистрированному домену.

Найдите в поиске свой домен и подключитесь.

Если требуется дополнительное подтверждение, перейдите в соответствующий раздел настроек и разрешите подключение.

https://www.gaianet.ai/domain-management/domain

Создание API-ключа

Настройка бота для отправки сообщений на домен
Вернитесь в терминал и создайте скрипт, который будет взаимодействовать с нодой через API.
Вставьте в него код для отправки запросов на ваш домен.
Замените домен на свой

nano gaia_bot.py
import aiohttp
import asyncio
import random
import os

# URL API Gaia
API_URL = "https://вашеимя.gaia.domains/v1/chat/completions"
GAIA_API_KEY = os.getenv("GAIA_API_KEY")

# Заголовки запроса
HEADERS = {
    "Authorization": f"Bearer {GAIA_API_KEY}",
    "Accept": "application/json",
    "Content-Type": "application/json"
}

# Функция для чтения фраз и ролей из файлов
def load_from_file(file_name):
    with open(file_name, "r") as file:
        return [line.strip() for line in file.readlines()]

# Загрузка ролей и фраз
roles = load_from_file("roles.txt")
phrases = load_from_file("phrases.txt")

# Генерация случайного сообщения
def generate_random_message():
    role = random.choice(roles)
    content = random.choice(phrases)
    return {"role": role, "content": content}

# Создание сообщения
def create_message():
    user_message = generate_random_message()
    user_message["role"] = "user"
    other_message = generate_random_message()
    return [user_message, other_message]

# Функция для одного потока общения с API
async def chat_worker(worker_id):
    async with aiohttp.ClientSession() as session:
        while True:
            messages = create_message()
            user_message = next((msg["content"] for msg in messages if msg["role"] == "user"), "No user message found")
            print(f"[Worker {worker_id}] Отправлен вопрос: {user_message}")

            data = {"messages": messages}
            try:
                async with session.post(API_URL, json=data, headers=HEADERS, timeout=300) as response:
                    if response.status == 200:
                        result = await response.json()
                        assistant_response = result["choices"][0]["message"]["content"]
                        print(f"[Worker {worker_id}] Получен ответ: {assistant_response}\n{'-'*50}")
                    else:
                        print(f"[Worker {worker_id}] Ошибка: {response.status} {await response.text()}")
            except asyncio.TimeoutError:
                print(f"[Worker {worker_id}] Тайм-аут ожидания. Отправляю следующий запрос...")
            except Exception as e:
                print(f"[Worker {worker_id}] Ошибка: {e}")

            await asyncio.sleep(3)

# Главная функция: запускает несколько потоков
async def main(num_workers):
    tasks = [chat_worker(i) for i in range(num_workers)]
    await asyncio.gather(*tasks)

# Запрос количества потоков у пользователя
if __name__ == "__main__":
    while True:
        try:
            num_threads = int(input("Введите количество потоков (сколько нод подключено): ").strip())
            if num_threads > 0:
                break
            else:
                print("Число потоков должно быть больше 0!")
        except ValueError:
            print("Ошибка! Введите число.")

    print(f"Запускаем {num_threads} потоков...")
    asyncio.run(main(num_threads))

Сохраните файл кнопками CTRL+X затем Y и Enter


Создайте файл phrases.txt с фразами, которые будут использованы в чате:
Вы можете придумать и добавить свои вопросы или взять мои готовые тут - https://github.com/VaniaHilkovets/GAIA/blob/main/Phrases

nano phrases.txt

Вставьте фразы и сохраните файл кнопками CTRL+X затем Y и Enter Создайте файл roles.txt с ролями:

nano roles.txt
system
user
assistant

Добавление API-ключа в переменные окружения

  1. Откройте терминал на сервере.
  2. Добавьте API-ключ в переменную окружения
export GAIA_API_KEY="вставьте_свой_ключ"

Сделайте переменную постоянной (чтобы она не исчезала после перезапуска сервера)

echo 'export GAIA_API_KEY="ваш_апи_ключ"' >> ~/.bashrc
source ~/.bashrc

Запуск бота для работы с Gaia API

  1. Запускаем бота и указываем количество потоков (равное количеству подключенных нод):
tmux new -s gaia
python3 gaia_bot.py

Выйти из сесии Tmux что бы бот работал в фоне - CTRL+B а затем D

Что бы позже вернуться в сессию введите команду:

tmux attach -t gaia


После этого бот будет автоматически отправлять запросы на ваш домен, балансируя нагрузку между подключенными нодами.

Бот работает, пока не закончатся API-запросы.

Если GaiaCredits заканчиваются, бот автоматически прекращает работу.


Если вы будете подключать много нод то бота нужно запускать только на одном сервере и указать количество потоков (нод) при запуске.


Оставляйте комментарии и подписывайтесь на мой Telegram-канал, где я отвечаю на любые ваши вопросы:
👉 https://t.me/SotochkaZela