Перейти к содержанию

Пошаговое руководство по развертыванию BeeCR в вашей инфраструктуре вручную

⚠️ Примечание: Это руководство предназначено для опытных пользователей, которые хотят контролировать различные аспекты процесса установки. Если вы ищете более простое руководство, обратитесь к документу "Пошаговое руководство по развертыванию BeeCR через установочный скрипт".

Данный документ представляет собой пошаговое руководство по установке и настройке решения BeeCR на собственных серверах без использования Docker. Процесс установки продемонстрирован на сервере с графическим процессором "NVIDIA Tesla V100", работающим под управлением операционной системы "Linux Ubuntu 20.04 LTS". Это руководство призвано помочь пользователям пройти установочный процесс, убедившись, что все предварительные требования выполнены и необходимые компоненты установлены и настроены правильно.

⚠️ Примечание: По состоянию на лето 2024 года дистрибутив Ubuntu 20.04 LTS по-прежнему поддерживается компанией Canonical, но является несколько устаревшим. Мы выбрали эту версию ОС для данного руководства, потому что для настройки окружения требуются дополнительные шаги, и мы хотим их продемонстрировать. Если вы используете более новую версию Ubuntu, просто пропустите шаги, которые не требуются.

📄 Требования

Для развертывания решения на сервере вам понадобится следующее:

  1. Сервер с архитектурой "x86_64" под управлением Linux (желательно Ubuntu или Debian).
  2. Графический ускоритель NVidia (минимум 24 ГБ памяти, рекомендуется 40 ГБ).
  3. Утилита командной строки curl.
  4. Python (поддерживаются версии 3.9 – 3.12) и утилита командной строки virtualenv.
  5. Пользователь, запускающий процесс установки, должен иметь привилегии "root" или "sudoer".
  6. Вы загрузили архив с установочными файлами BeeCR.

1️⃣ Подготовьте окружение

Операционная система

Убедитесь, что ваша ОС - Linux, архитектура - "x86_64", а используемое ядро не "Microsoft WSL":

uname -smr

Пример вывода:

Linux 5.15.0-71-generic x86_64

cURL

Убедитесь, что установлен curl. Если нет, установите curl через менеджер пакетов (на Ubuntu используйте apt):

sudo apt-get update
sudo apt-get install -y curl

Python и virtualenv

Убедитесь, что установлены Python (3.9 – 3.12) и virtualenv.

Для установки Python 3.9 и virtualenv на Ubuntu 20.04 LTS используйте менеджер пакетов apt:

sudo apt-get update
sudo apt-get install -y python3.9 python3-virtualenv

Если установлено несколько версий Python, вам может потребоваться настроить версию по умолчанию:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
sudo ln -s /usr/lib/python3/dist-packages/apt_pkg{.cpython-38-x86_64-linux-gnu,}.so

Команды выше делают следующее:

  1. Устанавливают приоритет python3.8 (старая версия Python) на уровень 1 для псевдонима python3.
  2. Устанавливают более высокий приоритет для python3.9 (новая версия Python) на уровень 2 для псевдонима python3.
  3. Устанавливают приоритет для псевдонима python на python3.
  4. Исправляют потенциальную проблему с apt_pkg, создавая символическую ссылку на общую библиотеку, принадлежащую более старой версии Python.

2️⃣ Установите и настройте ИИ сервер

Установите ИИ сервер

curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION="0.3.6" sh

Создайте дополнительную директорию конфигурации /etc/systemd/system/ollama.service.d. Затем поместите туда файл env.conf с следующим содержимым:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11435"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_NUM_PARALLEL=2"

Перезагрузите "systemd" и включите службу ollama:

sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama

Убедитесь, что ИИ сервер запущен:

curl -s "http://localhost:11435"

Скачайте ИИ модель

OLLAMA_HOST="0.0.0.0:11435" ollama pull "codestral:22b"

3️⃣ Установите и настройте API сервер

Создайте виртуальное окружение для Python

sudo virtualenv "/opt/beecr/venv"

Установите Uvicorn (ASGI-сервер)

sudo /opt/beecr/venv/bin/pip3 install "uvicorn~=0.30"

Установите API сервер

Выберите whl-пакет в соответствии с вашей версией Python. Для Python 3.9 установите пакет, содержащий py39 в имени. Для Python 3.10 установите пакет, содержащий py310 в имени. И так далее.

Если вы не знаете вашу версию Python, просто выполните команду /opt/beecr/venv/bin/python3 --version.

sudo /opt/beecr/venv/bin/pip3 install "./path/to/whl/package"

Настройте API сервер

Создайте файл конфигурации "systemd" /etc/systemd/system/beecr.service со следующим содержимым:

[Unit]
Description=BeeCR Service
After=network-online.target

[Service]
WorkingDirectory=/opt/beecr
ExecStart=/opt/beecr/venv/bin/python3 -m uvicorn --host 0.0.0.0 --port $PORT --log-config /opt/beecr/logging.json beecr.api.main:app
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Environment="PORT=8000"

[Install]
WantedBy=default.target

Отредактируйте переменную окружения PORT, если хотите, чтобы сервер API работал на другом порте.

⚠️ Примечание: Если вы хотите привязать сервер API к сокету IPv6, замените 0.0.0.0 на :: в конфигурации службы.

Создайте дополнительную директорию конфигурации /etc/systemd/system/beecr.service.d. Затем поместите туда файл env.conf с следующим содержимым:

[Service]

# Адрес и токен GitLab по умолчанию.
#
# Будут использоваться только в случае, если запросы не передают эти параметры явно.
# Environment="GITLAB_HOST=https://gitlab.com"
# Environment="GITLAB_TOKEN="


# Настройки для использования ИИ через Ollama-совместимое API.
Environment="OLLAMA_HOST=http://localhost:11435"


# Настройки для использования ИИ через OpenAI-совместимое API.
#
# Измените, если хотите использовать ИИ модели через API,
# совместимое с OpenAI, например "gpt4-o".
# Environment="OPENAI_HOST=https://api.openai.com"
# Environment="OPENAI_API_KEY="


# Имя ИИ модели по умолчанию.
#
# Эта модель будет использоваться для обработки API-запросов
# без явно указанного имени модели.
#
# Для API, совместимых с OpenAI, используйте имена моделей,
# как они есть, например, "gpt-4o".
#
# Для API, совместимых с Ollama, используйте имена моделей
# с префиксом "ollama/", например, "ollama/codestral:22b".
Environment="MODEL=ollama/codestral:22b"

Создайте рабочую директорию для сервера API /opt/beecr. Затем поместите туда файл logging.json со следующим содержимым:

{
    "version": 1,
    "filters": {
        "correlation_id": {
            "()": "asgi_correlation_id.CorrelationIdFilter",
            "uuid_length": 32,
            "default_value": "-"
        }
    },
    "formatters": {
        "default": {
            "format": "%(levelname)s\t[BeeCR-%(correlation_id)s]\t%(message)s",
            "datefmt": "%Y-%m-%d %H:%M:%S"
        }
    },
    "handlers": {
        "console": {
            "formatter": "default",
            "filters": ["correlation_id"],
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stdout",
            "level": "DEBUG"
        }
    },
    "root": {
        "handlers": ["console"],
        "level": "INFO"
    },
    "loggers": {
        "uvicorn": {
            "propagate": true
        },
        "uvicorn.access": {
            "propagate": true
        }
    }
}

Перезагрузите "systemd" и включите службу beecr:

sudo systemctl daemon-reload
sudo systemctl enable beecr

4️⃣ Получите и установите лицензию

Если у вас нет файла лицензии, выполните следующие шаги:

  1. Свяжитесь с нашей командой (например, через электронную почту по адресу beecr@cvisionlab.com).
  2. Выполните команду nvidia-smi -L и предоставьте команде BeeCR информацию о вашем графическом процессоре (например, GPU 0: Tesla V100-PCIE-32GB (UUID: GPU-d541606d-4910-6857-7cc0-4821bec3f358)).

После получения файла лицензии (он должен иметь имя beecr.lic), поместите его в директорию /opt/beecr и перезапустите службу beecr, выполнив следующую команду:

sudo systemctl restart beecr

5️⃣ Проверка логов (опционально)

Используйте стандартные команды "systemd" для управления службой.

Например, чтобы просмотреть логи, используйте утилиту командной строки journalctl:

journalctl -fu beecr

Пример ожидаемого результата выполнения команды:

Jul 16 10:53:42 code-review-2004-v100 python3[41610]: INFO        [BeeCR--]        Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Jul 16 10:53:42 code-review-2004-v100 systemd[1]: beecr.service: Succeeded.
Jul 16 10:53:45 code-review-2004-v100 systemd[1]: Stopped BeecR Service.
Jul 16 10:53:45 code-review-2004-v100 systemd[1]: Started BeecR Service.
Jul 16 10:53:46 code-review-2004-v100 python3[41624]: 🟢 License check passed. License info: GPU based license.
Jul 16 10:53:46 code-review-2004-v100 python3[41624]: INFO        [BeeCR--]        Started server process [41624]
Jul 16 10:53:46 code-review-2004-v100 python3[41624]: INFO        [BeeCR--]        Waiting for application startup.
Jul 16 10:53:46 code-review-2004-v100 python3[41624]: INFO        [BeeCR--]        Settings: pkg_name='beecr-api' version='v1.27.1' domain='beecr.io' protocol='http' port=8000 model='ollama/codestral:22b' temperature=0.8 use_original_code=True language='English' openai_host='https://api.openai.com' openai_api_key='*****' ollama_host='http://localhost:11435' gitlab_host='https://gitlab.com' target=None target_extra=None target_exclude=None.
Jul 16 10:53:46 code-review-2004-v100 python3[41624]: INFO        [BeeCR--]        Application startup complete.
Jul 16 10:53:46 code-review-2004-v100 python3[41624]: INFO        [BeeCR--]        Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

👍 Заключение

Следуя данному руководству, вы успешно установили и настроили решение BeeCR для проверки кода на своем собственном сервере. Вы узнали, как решать распространенные проблемы при установке, такие как отсутствие требуемых утилит, устаревшая версия Python. Также изучили приёмы управления службой с помощью "systemd". Теперь вы можете использовать возможности BeeCR для улучшения процессов проверки вашего кода. Если у вас возникнут дополнительные проблемы или вам понадобится лицензия, пожалуйста, свяжитесь с нашей командой.