#version-control #ai #machine-learning #command-line-tool #artificial-intelligence #server-api #computer-vision

liboxen

Oxen是一个快速、非结构化数据版本控制工具,用于帮助版本化数据集,用Rust编写

127个版本 (13个重大更改)

0.18.14 2024年8月7日
0.18.7 2024年7月26日
0.14.1 2024年3月31日
0.9.18 2023年12月28日
0.7.7 2023年7月31日

#14 in Machine learning

Download history 616/week @ 2024-04-28 225/week @ 2024-05-05 13/week @ 2024-05-12 466/week @ 2024-05-19 130/week @ 2024-05-26 151/week @ 2024-06-02 361/week @ 2024-06-09 357/week @ 2024-06-16 236/week @ 2024-06-23 620/week @ 2024-06-30 5/week @ 2024-07-07 476/week @ 2024-07-21 360/week @ 2024-07-28 494/week @ 2024-08-04 16/week @ 2024-08-11

1,346 monthly downloads

自定义许可证

2MB
50K SLoC

🐂 Oxen

创建一个每个人都能为通用人工智能做出贡献的世界,从数据开始。

🌾 Oxen是什么?

Oxen的核心是一个用Rust编写的数据版本控制库。它的目标是快速、可靠且易于使用。它旨在以多种方式使用,从简单的命令行工具到远程服务器同步,以及集成到其他生态系统,如python

📚 文档

Oxen.ai工具链的文档可以在这里找到。

🔨 构建 & 运行

安装依赖项

Oxen完全用Rust 🦀 编写。您应该使用rustup安装Rust工具链:https://rust-lang.net.cn/tools/install

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

如果您是开发者并想了解更多关于添加代码或整体架构的信息,请从这里开始。否则,以下是一个快速入门指南,以确保一切正常。

构建

cargo build

如果是在英特尔mac上,您可能需要使用以下内容进行构建

$ rustup target install x86_64-apple-darwin
$ cargo build --target x86_64-apple-darwin

如果是在Windows上,您可能需要将以下目录添加到“INCLUDE”环境变量中

"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include"

"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.27023\include"

"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\Llvm\lib\clang\12.0.0\include"

这些是示例路径,可能会因机器而异。如果您通过Microsoft Visual Studio Build Tools安装了“C++ Clang工具”,则可以从Visual Studio安装下的“BuildTools\VC\Tools”中找到这些目录

加快构建过程

您可以使用mold链接器来加快构建过程(MIT许可的macOS版本为sold)。

使用以下说明安装和配置 cargo 以用于构建 Oxen

git clone --depth=1 --single-branch https://github.com/bluewhalesystems/sold.git

mkdir sold/build
cd sold/build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=c++ ..
cmake --build . -j $(nproc)
sudo cmake --install .

然后在 Oxen 仓库根目录中创建 .cargo/config.toml,内容如下

[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "link-arg=-fuse-ld=/usr/local/bin/ld64.mold"]

[target.x86_64-apple-darwin]
rustflags = ["-C", "link-arg=-fuse-ld=/usr/local/bin/ld64.mold"]

对于 macOS 的 Apple Silicon,您可以使用 lld 链接器。

brew install llvm

然后在 Oxen 仓库根目录中创建 .cargo/config.toml,内容如下

[target.aarch64-apple-darwin]
rustflags = [ "-C", "link-arg=-fuse-ld=/opt/homebrew/opt/llvm/bin/ld64.lld", ]

运行

CLI

要从命令行运行 Oxen,请将 Oxen/target/debug 目录添加到 'PATH' 环境变量中

export PATH="$PATH:/path/to/Oxen/target/debug"

在 Windows 上,您可以使用

$env:PATH += ";/path/to/Oxen/target/debug" 

初始化一个新的仓库或克隆现有的一个

oxen init
oxen clone https://hub.oxen.ai/namespace/repository

这将创建当前目录中的 .oxen 目录,并允许您运行 Oxen CLI 命令

oxen status
oxen add images/
oxen commit -m "added images"
oxen push origin main

Oxen 服务器

要运行本地 Oxen 服务器,生成一个配置文件和令牌以验证用户

./target/debug/oxen-server add-user --email [email protected] --name Ox --output user_config.toml

将配置文件复制到默认位置

mkdir ~/.oxen
mv user_config.toml ~/.oxen/user_config.toml
cp ~/.oxen/user_config.toml data/test/config/user_config.toml

设置您希望数据同步到的位置。默认同步目录是 ./data/,要更改它,请将 SYNC_DIR 环境变量设置为一个路径。

export SYNC_DIR=/path/to/sync/dir

您还可以在 /src/server 目录中创建一个 .env.local 文件,其中可以包含 SYNC_DIR 变量,以避免每次运行服务器时都设置它。

运行服务器

./target/debug/oxen-server start

要使用实时重载运行服务器,首先安装 cargo-watch

cargo install cargo-watch

在 Windows 上,您可能需要使用 cargo-watch --locked

cargo install cargo-watch --locked

然后按以下方式运行服务器

cargo watch -- cargo run --bin oxen-server start

Nix Flake

如果您已安装 Nix,则可以使用 flake 来构建和运行服务器。这将自动安装和配置 Linux & macOS 所需的构建工具链依赖项。

nix build .#oxen-server
nix build .#oxen-cli
nix build .#liboxen
nix run .#oxen-server -- start
nix run .#oxen-cli -- init

要在 Nix 开发 shell 中使用标准 rust 工具链进行开发

nix develop -c $SHELL
cargo build
cargo run --bin oxen-server start
cargo run --bin oxen start

flake 还提供了衍生工具,可以构建包含构建和运行 oxen & oxen-server 所需的最小依赖项集的 OCI (Docker) 镜像。

nix build .#oci-oxen-server
nix build .#oci-oxen-cli

这将导出 OCI 镜像,可以用以下方式加载

docker load -i result

单元测试和集成测试

通过遵循以下设置步骤,确保您的用户已配置且服务器正在默认端口和主机上运行

# Configure a user
mkdir ./data/test/runs
./target/debug/oxen-server add-user --email [email protected] --name Ox --output user_config.toml
cp user_config.toml data/test/config/user_config.toml
# Start the oxen-server
./target/debug/oxen-server start

注意:测试会打开很多文件句柄,所以如果运行所有测试,请限制测试线程数。

在运行测试之前,您也可以增加系统允许的最大打开文件数 ulimit

ulimit -n 10240
cargo test -- --test-threads=$(nproc)

运行特定测试可能更快(从编译和运行的角度来看)。要运行特定库测试

cargo test --lib test_get_metadata_text_readme

要运行特定集成测试

cargo test --test test_rm test_rm_directory_restore_directory

要运行所有调试输出并运行特定测试

env RUST_LOG=warn,liboxen=debug,integration_test=debug cargo test -- --nocapture test_command_push_clone_pull_push

要设置不同的测试主机,您可以设置 OXEN_TEST_HOST 环境变量

env OXEN_TEST_HOST=0.0.0.0:4000 cargo test

Oxen 服务器

结构

远程仓库具有与本地仓库相同的内部结构,但区别在于所有数据都位于 .oxen 目录中,而不是复制到“本地工作区”中。

API

服务器默认为 localhost 3000

set SERVER 0.0.0.0:3000

您可以从上面的配置文件(~/.oxen/user_config.toml)中获取您的身份验证令牌

set TOKEN <YOUR_TOKEN>

列出仓库

curl -H "Authorization: Bearer $TOKEN" "http://$SERVER/api/repos"

创建仓库

curl -H "Authorization: Bearer $TOKEN" -X POST -d '{"name": "MyRepo"}' "http://$SERVER/api/repos"

Docker

创建 Docker 镜像

docker build -t oxen/server:0.6.0 .

在端口 3000 上运行容器,从主机上的 /var/oxen/data 挂载本地文件系统到容器中的 /var/oxen/data。

docker run -d -v /var/oxen/data:/var/oxen/data -p 3000:3001 --name oxen oxen/server:0.6.0

或使用 docker compose

docker-compose up -d reverse-proxy
docker-compose up -d --scale oxen=4 --no-recreate

依赖项

~110–150MB
~3M SLoC