A distributed training orchestrator inspired by OpenAI's Evolution Strategies paper.
Find a file
2025-07-07 18:28:45 +02:00
.github/workflows client(py): add publish when merged to master 2025-03-12 19:12:11 +01:00
assets Update README.md 2025-01-03 05:02:52 +01:00
clients/python Bump version to v0.1.4 2025-07-07 18:28:45 +02:00
nix build(nix): add server nixos module 2025-03-12 19:12:11 +01:00
proto/evochi/v1 client(py): add 'max_epochs' field to HelloEvent 2025-01-06 02:08:59 +01:00
server Fix command in README.md 2025-06-29 01:31:23 +02:00
.envrc Setup nix env 2025-01-03 04:17:21 +01:00
.gitignore build(nix): add nix server package 2025-03-12 19:12:11 +01:00
.pre-commit-config.yaml style: add pre-commit config 2025-07-07 18:21:24 +02:00
buf.gen.yaml server: setup buf 2025-01-03 04:17:21 +01:00
buf.work.yaml server: setup buf 2025-01-03 04:17:21 +01:00
flake.lock Setup nix env 2025-01-03 04:17:21 +01:00
flake.nix build(nix): add server nixos module 2025-03-12 19:12:11 +01:00
justfile Add bump target to justfile 2025-03-12 19:12:11 +01:00
LICENSE Initial commit 2024-12-23 00:54:24 +01:00
README.md docs: update readme 2025-03-12 19:12:11 +01:00
version Bump version to v0.1.4 2025-07-07 18:28:45 +02:00

\LARGE {\color{white}\textrm{Evo}}{\color{gray}\textrm{lution~Or}}{\color{white}\textrm{ch}}{\color{gray}\textrm{estrat}}{\color{white}\textrm{i}}{\color{gray}\textrm{on}} 
Go Python
evochi

Evochi is a framework-agnostic distributed training orchestrator for reinforcement learning agents using OpenAI's Evolution Strategies.

Features

  • 🔥 Agnostic: Evochi doesn't depend on any specific framework (or even programming language) for your workers. You define the format of your state for all workers.
  • Fast: Evochi's server is written in Go and uses gRPC for fast communication.
  • 📦 Lightweight: Evochi is designed to be as lightweight as possible on the server side. The computational workload is handled on the worker side.
  • 📈 Dynamically Scalable: Evochi is built to scale horizontally and dynamically. Workers can leave or join at any time. As long as one worker remains in the workforce, the training can continue.
  • 🚦 Fault-Tolerance: Evochi is fault-tolerant. If a worker crashes, mission-critical tasks can be recovered and delegated to other workers. As long as there is at least one functional worker, fault tolerance is ensured.

Getting Started

Start the Server

Binary releases are available on GitHub.

Alternatively, you can run Evochi from (master) source using the go run command:

go run github.com/neuro-soup/evochi/cmd/evochi@latest

Important

Evochi requires some environment variables to be set. See the server README for all configuration options.

Full (minimal) example:

EVOCHI_JWT_SECRET="secret" EVOCHI_POPULATION_SIZE=50 go run github.com/neuro-soup/evochi/cmd/evochi@latest
Run with Nix

If you are using Nix, you can use the nix run command to run directly from source:

nix run "github:neuro-soup/evochi#server"

You can also import the package into your own Nix flake:

# flake.nix
inputs = {
    evochi.url = "github:neuro-soup/evochi";
};

# evochi.nix
{ inputs, pkgs, ... }:
{
    environment.systemPackages = [
        # installs `evochi` binary
        inputs.evochi.packages.${pkgs.system}.server
    ];
}

Alternatively, you can use evochi as Nix module:

# flake.nix
inputs = {
    evochi.url = "github:neuro-soup/evochi";
};

# evochi.nix
{ inputs, ... }:
{
    imports = [
        inputs.evochi.nixosModules.server
    ];

    services.evochi = {
        enable = true;
        config = {
            secret.file = ./evochi.secret;
            training.population = 100;
        };
    };
}

(Real-World) Example Implementations