IgdrasilAI — Унифицированная нейросетевая инфраструктура
IgdrasilAI — единая инфраструктура для работы с нейросетевыми бэкендами, локальными и удалёнными LLM, токенизаторами, агентами и мультиагентной сетью.
Главная идея: единые интерфейсы для бэкендов, LLM и агентов — пишешь код один раз, подключаешь разные модели и сети.
Документация по модулям
- Neural/Core
- Neural/Text
- Conversation
- Commands
- Agent
- Context
- Remote Models
- Network
- Training
- Loss Functions
Структура модуля (актуально)
IgdrasilAI/
├── Neural/
│ ├── Core/ # Базовые абстракции и IGpuMathOps
│ ├── Text/ # LocalLanguageModel, токенизаторы
│ └── Models/ # Модели/артефакты
├── Text/
│ ├── Conversation/ # Message, histories, converters, remote models
│ ├── Commands/ # Команды (Execute/Memory/Think)
│ ├── Context/ # Управление контекстом
│ └── Network/ # Мультиагентная сеть
└── Docs/
├── index.md
└── *.md
Быстрый старт
1. Инициализация бэкенда
using IgdrasilEngine.Engine.AI;
// Создаём реестр бэкендов
var registry = new NeuralBackendRegistry();
// Регистрируем доступные бэкенды
registry.RegisterBackend("TorchSharp", () => new TorchSharpBackend());
registry.RegisterBackend("ONNX", () => new OnnxBackend());
// Устанавливаем по умолчанию
registry.SetDefaultBackend("TorchSharp");
// Получаем бэкенд
var backend = registry.GetDefaultBackend();
await backend.InitializeAsync();
2. Загрузка модели
// Загружаем модель
var loadedModel = await backend.LoadModelAsync("path/to/model.pt");
Console.WriteLine($"Model: {loadedModel.Metadata.Name}");
Console.WriteLine($"Inputs: {loadedModel.Metadata.InputShapes[0]}");
3. Inference
// Создаём входной тензор
var input = new SimpleTensor(
shape: new[] { 1, 3, 224, 224 },
dataType: NeuralDataType.Float32,
device: backend.ActiveDevice,
data: imageData
);
// Выполняем inference
var output = await loadedModel.InferenceAsync(input);
var result = await output.GetDataAsFloatAsync();
Console.WriteLine($"Output shape: {string.Join(", ", output.Shape)}");
Console.WriteLine($"First 10 values: {string.Join(", ", result.Take(10))}");
Ключевые концепции
INeuralComponent
Базовый интерфейс для всех компонентов (бэкенды, модели, токенизаторы):
public interface INeuralComponent : IDisposable
{
string ComponentId { get; }
NeuralComponentState State { get; }
Task InitializeAsync(CancellationToken ct = default);
Task ShutdownAsync();
}
Состояния:
Uninitialized→Initializing→ReadyProcessing(во время inference)Error(если что-то пошло не так)Shutdown(выгружен)
INeuralBackend
Бэкенд для выполнения нейросетевых операций:
public interface INeuralBackend : INeuralComponent
{
IReadOnlyList<IComputeDevice> AvailableDevices { get; }
IComputeDevice ActiveDevice { get; set; }
Task<ILoadedModel> LoadModelAsync(string modelPath);
bool SupportsAsyncInference { get; }
}
Примеры бэкендов:
- TorchSharp - нативный PyTorch через .NET bindings
- ONNX - ONNX Runtime (любые框架)
- PyTorch - CPython subprocess
- llama.cpp - оптимизированные LLM модели
INeuralTensor
Унифицированный тензор для работы со всеми бэкендами:
public interface INeuralTensor : IDisposable
{
int[] Shape { get; }
NeuralDataType DataType { get; }
IComputeDevice Device { get; }
Task<float[]> GetDataAsFloatAsync();
Task SetDataAsync(Array data);
Task<INeuralTensor> MoveToDeviceAsync(IComputeDevice device);
Task<INeuralTensor> NormalizeAsync();
Task<INeuralTensor> ApplyActivationAsync(ActivationFunction activation);
}
Реализации:
SimpleTensor- простая реализация для CPUTorchTensor- обёртка над torch.TensorOnnxTensor- обёртка над OrtValuePythonTensor- обёртка над PyObject
IComputeDevice
Представление вычислительного устройства:
public interface IComputeDevice
{
string DeviceId { get; }
ComputeDeviceType DeviceType { get; } // CPU, CUDA, HIP, Metal, TPU
string DeviceName { get; }
long AvailableMemoryMB { get; }
long TotalMemoryMB { get; }
}
ILoadedModel
Загруженная нейросетевая модель:
public interface ILoadedModel : IDisposable
{
string ModelId { get; }
IModelMetadata Metadata { get; }
Task<INeuralTensor> InferenceAsync(INeuralTensor input);
IAsyncEnumerable<INeuralTensor> InferenceStreamAsync(INeuralTensor input);
}
Примеры использования
Классификация изображений
var backend = registry.GetBackend("TorchSharp");
var model = await backend.LoadModelAsync("resnet50.pt");
// Загружаем изображение
var imageData = LoadImage("photo.jpg");
var input = new SimpleTensor(
new[] { 1, 3, 224, 224 },
NeuralDataType.Float32,
backend.ActiveDevice,
imageData
);
var output = await model.InferenceAsync(input);
var logits = await output.GetDataAsFloatAsync();
// Берём top-5
var top5 = logits
.Select((val, idx) => (idx, val))
.OrderByDescending(x => x.val)
.Take(5)
.ToList();
foreach (var (classIdx, score) in top5)
Console.WriteLine($"Class {classIdx}: {score:F4}");
Streaming генерация текста
var backend = registry.GetBackend("TorchSharp");
var model = await backend.LoadModelAsync("gpt2.pt");
var prompt = "Hello, ";
var tokens = await tokenizer.EncodeAsync(prompt);
var inputTensor = new SimpleTensor(new[] { 1, tokens.Length }, /* ... */);
// Streaming генерация
await foreach (var outputToken in model.InferenceStreamAsync(inputTensor))
{
var tokenIds = await outputToken.GetDataAsIntAsync();
var text = await tokenizer.DecodeAsync(tokenIds);
Console.Write(text);
}
Работа с GPU/CPU
var backend = registry.GetBackend("TorchSharp");
// Выбираем CUDA если доступна
var gpuDevice = backend.AvailableDevices
.FirstOrDefault(d => d.DeviceType == ComputeDeviceType.CUDA);
if (gpuDevice != null)
{
backend.ActiveDevice = gpuDevice;
Console.WriteLine($"Using {gpuDevice.DeviceName}");
}
else
{
Console.WriteLine("CUDA not available, using CPU");
}
// Загружаем модель на выбранное устройство
var model = await backend.LoadModelAsync("model.pt");
Roadmap (обновлено)
Phase 1: Core (готово)
-
INeuralComponent- базовый интерфейс -
INeuralBackend- интерфейс бэкенда -
INeuralTensor- унифицированный тензор -
INeuralBackendRegistry- реестр бэкендов -
IGpuMathOps- GPU математика (18 операций) - Документация (этап 1)
Phase 2: Backends (выполнено)
- TorchSharp backend
- ONNX Runtime backend
- PyTorch backend (subprocess)
- llama.cpp backend
Phase 3: Text (LLM) (выполнено)
-
ITokenizerинтерфейс - TikTokenTokenizer, HuggingFaceTokenizer, SentencePieceTokenizer
-
LocalLanguageModel(multi-backend) - Конверторы сообщений (String, ChatML, Instruct, Alpaca, Llama2)
- Примеры с GPT/Llama/Mistral
Phase 4: Agents & Network (выполнено)
-
Agent<T>+AgentBuilder<T> - Команды (Execute/Memory/Think)
- Context management (IContextManager + стратегии)
- Remote models (OpenAI/Anthropic/Ollama)
- Мультиагентная сеть (AgentNetwork/NetworkCoordinator)
Phase 5: Speech (план)
-
IAudioProcessor- обработка аудио -
ISpeechToText- STT пайплайн -
ITextToSpeech- TTS пайплайн -
IVoiceConverter- преобразование голоса
Phase 6: Training (в процессе)
-
ITrainableModel- интерфейс обучения -
IOptimizer,ILossFunction- компоненты обучения - Примеры fine-tuning
Проект: Igdrasil Engine
Версия: 1.0
Статус: Development (Phase 1)