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
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