当前位置: 首页 > news >正文

SwanLab:现代化AI实验跟踪平台,加速模型迭代与团队协作

1. 从零到一:为什么我们需要一个现代化的AI实验跟踪平台

如果你和我一样,在AI模型训练这条路上摸爬滚打了几年,那你一定经历过这样的场景:凌晨三点,服务器上的训练还在吭哧吭哧地跑,你盯着终端里不断滚动的loss值,试图从一堆数字里看出点门道。或者,为了对比上周和这周调参的效果,你不得不打开十几个TensorBoard的日志文件夹,在不同的浏览器标签页之间来回切换,努力回忆哪个实验对应哪组超参数。更别提团队协作时,如何把训练结果清晰、直观地同步给同事或导师,往往需要截图、整理表格、写邮件,一套流程下来,实验的灵感火花可能早就熄灭了。

这就是传统实验跟踪方式的痛点:信息孤岛、对比低效、协作困难。我们花费大量时间在整理、对齐和沟通上,而不是真正地分析模型、迭代想法。SwanLab的出现,正是为了解决这些问题。它不是一个简单的“国产替代品”,而是一个真正从AI研发者视角出发,为模型训练团队量身打造的专业分析平台。它的核心目标很明确:让你和你的团队,能更专注、更高效地发现训练问题,加速模型迭代。

我第一次接触SwanLab是在一个多机多卡的分布式训练项目里。当时我们需要实时监控八个节点的损失曲线和硬件状态,传统的本地工具显得力不从心。接入SwanLab后,所有节点的数据自动汇聚到一个统一的云端看板,任何成员在任何地方打开网页就能看到全局的训练态势,还能在图表上直接标注、评论。那种“信息终于打通了”的感觉,让我意识到实验跟踪工具的价值远不止记录数字那么简单。

简单来说,SwanLab是一个集实验可视化、自动日志记录、超参数管理、实验对比和多人协同于一体的平台。它通过极简的代码嵌入你的训练流程,然后为你提供一个功能强大的在线工作台。无论你是刚入门的新手,还是在处理千亿参数大模型的老手,它都能帮你把杂乱无章的实验过程,梳理成清晰可循的研发脉络。

2. 核心设计解析:SwanLab如何构建你的实验“数字孪生”

要理解一个工具,最好的方式是拆解它的设计哲学。SwanLab的架构可以看作是为你的每一次训练实验,构建一个动态的、多维度的“数字孪生”。这个孪生体不仅记录结果,更实时反映训练的生命状态。

2.1 核心架构:客户端与云端的无缝协作

SwanLab的运作模式非常清晰,分为客户端SDK云端/自托管服务端两部分。

客户端SDK(就是你用pip install swanlab装的那个Python包)是嵌入在你训练代码中的“探针”。它的职责是轻量、非侵入式地收集数据。你只需要在代码关键位置调用几行swanlab.log,它就会在后台默默地帮你做几件事:

  1. 指标抓取:捕获你定义的损失、准确率等标量,以及图像、文本等多媒体数据。
  2. 环境快照:自动记录本次实验的完整上下文,包括Python版本、依赖包列表、Git提交哈希、命令行参数、超参数配置等。这解决了“这个结果到底是在什么环境下跑出来的”这个历史难题。
  3. 硬件监控:以可配置的频率,采集CPU、GPU、内存、磁盘IO、网络流量等系统资源使用情况。这对于排查性能瓶颈、优化资源利用率至关重要。
  4. 数据序列化与上传:将收集到的数据高效地序列化,并通过异步方式上传到你配置的后端(SwanLab云端或你自己的私有化服务器)。

这里有一个关键设计值得称道:异步与非阻塞。SwanLab的日志记录是异步执行的,这意味着swanlab.log调用几乎不会增加你训练循环的额外开销。数据会被先放入本地缓冲区,再由后台线程上传,确保你的训练速度不受影响。

云端/自托管服务端则是这个“数字孪生”的展示和交互中枢。它接收来自客户端的数据,并提供三大核心功能:

  1. 实时可视化仪表盘:将上传的指标数据实时渲染成交互式图表。你可以在训练过程中随时刷新网页,看到最新的曲线走势。
  2. 实验管理与对比引擎:存储所有历史实验,并提供强大的表格视图,支持按超参数筛选、排序,以及将多个实验的曲线叠加到同一张图上进行对比。
  3. 协作与分享层:基于项目和团队的权限管理,生成可分享的链接,支持在图表上直接评论,实现了围绕实验的上下文沟通。

这种架构的优势在于解耦。训练代码只需关心“记录什么”,而分析、管理和协作这些繁重的任务,全部交给了专门优化的Web应用去处理。

2.2 数据模型:超越标量的多维实验记录

与许多早期工具只关注标量(Scalar)不同,SwanLab从设计之初就支持多维度的实验数据。这反映了现代AI训练,特别是多模态和生成式AI训练的复杂需求。

  • 标量(Scalar):最基础的损失、准确率、学习率等。SwanLab的折线图为此做了大量优化,比如支持对数坐标轴、平滑曲线、局部放大、跨实验对比等。
  • 媒体数据
    • 图像(Image):记录训练中生成的样本、特征图、注意力热图等。对于CV任务,这是洞察模型“看到了什么”的关键。
    • 文本(Text):记录模型生成的文本、日志片段。对于LLM训练,可以直接在平台上查看模型在不同训练阶段输出的文本质量变化。这里特别提一下LLM生成内容可视化组件,它支持Markdown渲染,意味着你可以把格式丰富的评估报告、思维链过程直接记录并美观地展示出来。
    • 音频(Audio)&视频(Video):针对语音、音视频生成任务,可以直接在平台内播放,直观评估生成效果。
  • 高维数据
    • 3D点云(Object3D):对于自动驾驶、机器人、三维重建等领域,可以直接在网页中交互式查看点云数据,无需额外软件。
    • 分子结构(Molecule):对于AI制药、化学信息学,支持记录和可视化分子结构式,极大方便了相关领域的研究者。
  • 自定义图表(ECharts):这是SwanLab的一大亮点。通过swanlab.echartsAPI,你可以直接传入ECharts配置对象,生成柱状图、饼图、雷达图、热力图等任何ECharts支持的图表。这相当于为你提供了一个强大的自定义分析面板,你可以将模型内部的复杂统计信息(如梯度分布、激活值分布)以最合适的方式可视化出来。

这种丰富的数据类型支持,使得SwanLab能够承载从传统监督学习到前沿多模态、科学计算AI的完整实验记录需求。

2.3 集成哲学:拥抱生态,而非颠覆

AI技术栈极其庞杂,任何工具如果试图让用户重写所有代码来适配自己,都注定失败。SwanLab采取了聪明的“集成优先”策略。它目前已经与超过50个主流框架和库完成了深度集成。

这种集成分为几个层次:

  1. 原生回调支持:对于PyTorch Lightning、🤗 Transformers Trainer、MMEngine等提供了标准训练循环的框架,SwanLab提供了直接的回调函数(Callback)。你通常只需要添加一两行代码,或者设置一个环境变量,就能将框架内置的日志系统对接到SwanLab。
  2. 日志转换器:对于TensorBoard、Weights & Biases (W&B)、MLFlow等已有广泛用户基础的平台,SwanLab提供了sync_tensorboard,sync_wandb,sync_mlflow等工具。你可以在不修改原有代码的情况下,将历史或正在进行的实验日志,一键同步到SwanLab中进行统一管理和对比分析。这对于团队迁移或工具选型评估非常友好。
  3. 低层级API兼容:对于自定义训练循环,SwanLab的核心swanlab.logAPI设计得足够简单和灵活,可以轻松嵌入任何Python代码中。

这种设计体现了一个务实的态度:SwanLab旨在成为你现有工作流的增强层,而不是替代层。它通过降低接入成本,最大化地扩大了自己的适用场景。

3. 实战上手:从安装到第一个可视化实验

理论说了这么多,是时候动手了。我们从一个最简单的图像分类任务开始,看看如何用SwanLab在十分钟内搭建起完整的实验跟踪流程。

3.1 环境准备与安装

首先,确保你的Python环境在3.8及以上。安装SwanLab只需要一行命令,这也是最推荐的方式:

pip install swanlab

如果你想体验最新的开发版特性(比如刚合并到主分支的某个功能),可以使用源码安装:

# 从GitHub克隆并安装 git clone https://github.com/SwanHubX/SwanLab.git cd SwanLab pip install -e . # 或者直接pip安装GitHub分支 # pip install git+https://github.com/SwanHubX/SwanLab.git

注意:开发版可能包含不稳定特性,建议生产环境使用PyPI上的稳定版本。

安装完成后,你需要一个SwanLab账户来接收数据。前往 SwanLab官网 免费注册。登录后,在用户设置 -> API Key 页面,复制你的API Key。

回到终端,运行登录命令:

swanlab login

根据提示粘贴你的API Key并回车。登录信息会安全地保存在本地,后续实验会自动使用。

3.2 极简集成:三行代码开启跟踪

让我们写一个最简单的训练模拟脚本,来验证SwanLab是否工作正常。创建一个名为demo.py的文件:

import swanlab import time # 1. 初始化实验 # project参数定义项目名,config记录本次实验的超参数 swanlab.init( project="my-first-swanlab", experiment_name="demo-experiment-1", config={ "learning_rate": 0.001, "batch_size": 32, "model": "SimpleNN", "description": "这是一个SwanLab快速上手演示" } ) # 2. 模拟训练循环并记录指标 for epoch in range(5): # 模拟5个epoch # 模拟计算损失和准确率 train_loss = 1.0 / (epoch + 1) + 0.01 * (epoch % 3) val_acc = 0.5 + epoch * 0.1 + 0.02 * (epoch % 2) # 使用swanlab.log记录指标字典 # 每个键会成为仪表盘中的一个图表 swanlab.log({ "train/loss": train_loss, "val/accuracy": val_acc, "epoch": epoch # 特殊的‘epoch’键会自动作为x轴 }) # 模拟一个训练步骤的时间 time.sleep(1) print("实验完成!请前往 https://swanlab.cn 查看你的仪表盘。")

运行这个脚本:

python demo.py

如果一切正常,你会在终端看到类似这样的输出,表明数据正在上传:

[SwanLab] Experiment started. View at: https://swanlab.cn/your-username/my-first-swanlab/runs/xxxx [SwanLab] Tracking run with swanlab version x.x.x [SwanLab] Logging to: https://swanlab.cn/your-username/my-first-swanlab/runs/xxxx

打开终端输出的那个链接,或者直接登录SwanLab官网,进入“我的项目”,你应该能看到一个名为my-first-swanlab的项目,里面有一个正在运行或已完成的实验。点击进入,你会看到一个清晰的仪表盘,上面有两条曲线:“train/loss”和“val/accuracy”。恭喜,你的第一个SwanLab实验已经跑通了!

3.3 核心API深度解析

上面的例子展示了最基本的用法,但SwanLab的API远不止于此。我们来深入看看几个核心函数。

swanlab.init():实验的蓝图

init函数是实验的起点,它定义了实验的元数据。除了projectconfig,还有一些关键参数:

  • experiment_name: 给本次实验起个名字。如果不指定,SwanLab会生成一个随机但易读的名字(如summer-galaxy-42)。建议根据实验内容命名,如resnet50-lr1e4-bs128
  • description: 更详细的实验描述,可以记录实验目的、假设等。这个信息会显示在实验详情页,对于后期回顾非常重要。
  • group: 将多个相关实验归为一组(例如,同一组超参数搜索下的不同尝试)。在表格视图中可以按组筛选,极大方便了管理。
  • job_type: 定义任务类型,如train,eval,inference。有助于在复杂项目中区分不同阶段的运行记录。

swanlab.log():数据记录的核心

log函数是你的主要工具。它的设计非常灵活:

  • 支持嵌套字典:你可以用train/loss这样的键名,SwanLab会自动识别/并创建对应的分组和图表层级,让仪表盘更有条理。
  • 自动步数推断:默认情况下,每次调用log会增加一个全局步数(step)。你也可以通过step参数手动指定,这在验证集不是每个训练step都评估时很有用。
  • 记录多媒体:除了标量,你可以直接传入PIL图像、NumPy数组、音频文件路径等,SwanLab会自动处理上传和可视化。例如:
    # 记录一张图像 swanlab.log({"sample_image": swanlab.Image(image_array, caption="Epoch {}".format(epoch))}) # 记录一段文本 swanlab.log({"generated_text": swanlab.Text(model_output, caption="Step {}".format(step))})

swanlab.finish():优雅地结束

在训练脚本的最后,显式调用swanlab.finish()是个好习惯。它会确保所有缓冲中的数据都被上传,并将实验状态标记为“已完成”。如果你的训练脚本可能被中断,SwanLab有断点续传机制,但显式结束能让数据更完整。

3.4 与真实训练循环结合

让我们看一个更接近真实场景的PyTorch训练片段:

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms import swanlab # 初始化SwanLab实验 swanlab.init( project="pytorch-mnist", config={ "batch_size": 64, "epochs": 10, "lr": 0.01, "optimizer": "SGD", "model": "SimpleCNN", } ) # ... (模型、数据加载器定义省略) ... for epoch in range(config['epochs']): model.train() running_loss = 0.0 for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() running_loss += loss.item() # 每100个batch记录一次训练损失 if batch_idx % 100 == 99: avg_loss = running_loss / 100 # 记录到‘train’分组下 swanlab.log({"train/loss": avg_loss}) running_loss = 0.0 # 每个epoch结束后在验证集上评估 model.eval() val_loss = 0.0 correct = 0 with torch.no_grad(): for data, target in val_loader: output = model(data) val_loss += criterion(output, target).item() pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() val_loss /= len(val_loader.dataset) val_accuracy = 100. * correct / len(val_loader.dataset) # 记录验证集指标,并指定step为epoch数 swanlab.log({ "val/loss": val_loss, "val/accuracy": val_accuracy }, step=epoch) # 可以记录一些样本图像 if epoch % 5 == 0: # 取一个batch的图像记录 sample_images = data[:8] # 取前8张 swanlab.log({ "val/samples": swanlab.Image(sample_images, caption=f"Epoch {epoch} Validation Samples") }) swanlab.finish()

在这个例子中,我们展示了如何将SwanLab自然地嵌入到标准的训练循环中:高频的train/loss在内部循环中记录,低频的val/accuracy和样本图像在每个epoch结束时记录。通过合理使用step参数和分组命名,仪表盘上的图表会非常清晰。

4. 高级特性与深度使用技巧

当你熟悉了基础操作后,SwanLab提供的一系列高级功能能让你和团队的分析效率再上一个台阶。

4.1 实验对比:从单点分析到全局洞察

单个实验的曲线只能告诉你“发生了什么”,而多个实验的对比才能告诉你“为什么发生”。SwanLab的对比功能是其核心价值之一。

表格视图对比:在项目主页,你可以看到所有实验以表格形式列出,包含最终指标、超参数、创建时间等。你可以:

  1. 筛选:例如,只显示learning_rate小于0.01且batch_size为128的实验。
  2. 排序:点击任何一列的表头,按准确率从高到低排序,快速找到最佳模型。
  3. 列自定义:选择显示哪些超参数和指标列,聚焦关键信息。
  4. 基线对比:这是2026年3月新增的强大功能。你可以设定一个实验为基线(Baseline),其他实验的指标会自动计算与基线的差异百分比,并以颜色高亮显示(绿色表示提升,红色表示下降),让你一眼就能看出哪些参数调整带来了正向收益。

图表视图对比:进入任意一个实验的图表页面,你可以点击侧边栏其他实验的“眼睛”图标,将其曲线叠加到当前图表上。这对于分析学习率调度策略对损失曲线的影响、不同模型结构的收敛速度等场景极其直观。你还可以使用“分组”功能,将同一超参数搜索下的实验曲线以不同颜色显示在同一张图上,进行宏观趋势分析。

4.2 硬件监控:让资源瓶颈无处遁形

模型训练,尤其是大规模训练,常常受限于计算资源。SwanLab的硬件监控功能可以帮你回答以下问题:

  • GPU利用率是否饱和?是否存在数据加载瓶颈(GPU等待CPU)?
  • 训练过程中显存是否在缓慢增长(可能的内存泄漏)?
  • 多卡训练时,各卡负载是否均衡?

SwanLab支持几乎全栈的国产和海外硬件,从英伟达、AMD到华为昇腾、寒武纪MLU、昆仑芯XPU等。监控数据会以折线图形式展示,你可以清晰地看到在整个训练周期内,CPU/GPU利用率、显存占用、磁盘IO、网络流量的变化趋势。

实操心得:曾经在一个多机训练任务中,通过SwanLab的硬件监控发现某一台机器的网络接收流量异常低,排查后发现是网卡驱动问题。如果没有全局的监控视图,这种问题很难定位。

4.3 团队协作:打破实验室的墙

对于团队项目,SwanLab的协作功能是游戏规则改变者。

  1. 项目与团队:你可以创建团队,在团队下创建项目。将成员加入团队或项目,他们就能看到对应的实验。
  2. 实时共享:每个实验、每个图表甚至整个项目都有独立的、永久的URL。你可以直接把链接发给同事或导师,他们无需登录(如果项目是公开的)或登录后即可查看,无需你再打包发送日志文件。
  3. 图表评论:在看图表时,如果发现某个地方有异常或值得讨论,可以直接在图表对应的数据点上添加评论(Pin)。评论会带着上下文(时间步、指标值)保存下来,其他成员可以看到并回复。这相当于把实验讨论会搬到了数据旁边,沟通效率极高。
  4. 移动端支持:SwanLab的网页端对移动设备做了良好适配。你可以在手机上随时查看训练进度,甚至接收训练完成或异常的通知(结合插件)。

4.4 私有化部署:完全掌控你的数据

对于数据敏感或网络隔离的研发环境(如企业内网、高校实验室集群),SwanLab提供了完整的私有化部署方案。你可以在自己的服务器上部署SwanLab服务端,所有实验数据都留在内网,同时享受与云端版相同的功能体验。

部署方式非常灵活:

  • Docker Compose:最简单快捷的方式,适合单机或小型集群。官方提供了docker-compose.yml文件,一条命令即可启动所有服务(前端、后端、数据库)。
  • Kubernetes:对于需要高可用、弹性伸缩的生产级环境,SwanLab提供了完整的K8s部署清单(Helm Chart)。这方便了在云原生环境中集成。
  • 离线看板:即使在没有外网连接的环境,你也可以安装swanlab[dashboard],使用swanlab watch命令在本地浏览器打开一个轻量级的仪表盘,查看本地生成的日志文件。

私有化部署确保了数据的自主可控,同时保留了强大的协作和分析能力,是企业级应用的理想选择。

4.5 插件生态:按需扩展功能

SwanLab的插件系统允许你自定义功能。目前官方和社区提供了一些实用插件:

  • 通知插件:训练完成、失败或达到某个指标阈值时,自动发送通知到飞书、钉钉、企业微信、Slack、Discord甚至邮件。你再也不用时不时刷新页面了。
  • 记录器插件:例如CSV记录器,可以在记录到SwanLab的同时,在本地备份一份CSV文件,方便用其他工具进行二次分析。
  • 自定义插件:你可以根据团队内部流程,开发自己的插件。例如,训练完成后自动将最佳模型推送到内部的模型仓库,或者将实验元数据同步到项目管理系统。

5. 常见问题与故障排查实录

即使工具设计得再完善,在实际使用中总会遇到一些“坑”。下面是我和社区伙伴们总结的一些常见问题及解决方案。

5.1 安装与登录问题

Q1:pip install swanlab速度慢或失败。A1: 这通常是由于网络问题。可以尝试使用国内镜像源:

pip install swanlab -i https://pypi.tuna.tsinghua.edu.cn/simple

如果还是不行,检查你的Python版本是否>=3.8,以及pip版本是否最新。

Q2:swanlab login失败,提示网络错误或认证失败。A2:

  • 首先确认你能正常访问https://swanlab.cn
  • 检查复制的API Key是否正确,前后是否有空格。
  • 如果你在公司代理后面,可能需要配置环境变量:
    export HTTP_PROXY=http://your-proxy:port export HTTPS_PROXY=http://your-proxy:port
  • 登录信息默认保存在~/.swanlab/credentials。如果怀疑凭证文件损坏,可以删除该文件后重新登录。

5.2 数据记录与上传问题

Q3: 训练脚本运行了,但SwanLab网站上看不到数据或数据更新很慢。A3:

  • 检查网络连接:客户端需要能访问https://api.swanlab.cn(云端版)或你的私有化部署地址。运行curl -I https://api.swanlab.cn测试连通性。
  • 查看客户端日志:SwanLab SDK默认会打印信息到标准输出。确保你没有禁用日志。如果看到类似“Uploading...”或“Network error, retrying...”的消息,说明在上传。
  • 理解异步上传swanlab.log是异步的,数据会先缓存在本地(默认在~/.swanlab/runs下),然后由后台线程上传。训练结束后,可以调用swanlab.finish()确保所有数据上传完毕。即使脚本崩溃,下次运行同目录下的脚本,SwanLab也会尝试续传未完成的数据。
  • 检查实验状态:在SwanLab网页上,实验状态可能是“运行中”、“已完成”或“异常”。如果状态异常,可以点击实验查看详情或错误信息。

Q4: 记录图像/音频等媒体文件时,上传速度很慢或失败。A4:

  • 媒体文件通常较大。SwanLab会对图像进行有损压缩(可配置质量),以减小上传体积。确保你的文件大小在合理范围内。
  • 检查本地磁盘空间,缓存文件可能占用了空间。
  • 对于大批量媒体记录,考虑降低记录频率,或者先记录到本地,训练结束后再使用swanlab sync命令同步。

5.3 可视化与使用问题

Q5: 图表太多,页面卡顿。A5:

  • 使用LightningBoard(闪电看板)模式。这是SwanLab为超多图表(如数百个指标)场景优化的视图,渲染性能大幅提升。你可以在项目设置或实验页面中切换到该模式。
  • 使用分组(Group)功能。将相关的图表拖拽到同一个分组内,分组可以折叠,让页面更整洁。
  • 使用图表筛选。在图表页面顶部的搜索框,可以输入关键词筛选出你关心的图表。

Q6: 如何对比两个非常早期的训练步骤(step)的差异?A6:

  • 使用折线图的局部放大功能。在图表上按住鼠标左键拖拽一个区域,即可放大该区域。
  • 使用X轴数据源选择。有时默认的X轴是“相对时间”或“全局步数”,你可以将其切换为“epoch”或其他你记录的标量,以便更精确地对齐不同实验的相同阶段。

Q7: 我想自定义图表样式(如颜色、线型)。A7:

  • 在图表右上角的“编辑”按钮中,可以进入图表配置面板。这里可以修改线条颜色、粗细、类型(实线、虚线)、图表标题、坐标轴范围等。
  • 对于通过swanlab.echarts创建的自定义图表,你拥有完全的ECharts配置控制权,可以实现任何复杂的可视化效果。

5.4 与框架集成问题

Q8: 我在使用PyTorch Lightning/HuggingFace Transformers,如何集成?A8:

  • PyTorch Lightning:最简单的方式是使用SwanLabLogger回调。在你的Trainer中传入即可:
    from swanlab.integration.pytorch_lightning import SwanLabLogger swanlab_logger = SwanLabLogger(project="my-pl-project") trainer = Trainer(logger=swanlab_logger, ...)
  • HuggingFace Transformers:从transformers版本4.50.0开始,原生支持SwanLab。在TrainingArguments中设置report_to="swanlab"即可。更早的版本可以使用swanlab库提供的SwanLabCallback
  • 绝大多数集成框架的详细用法,都可以在SwanLab官方文档的“集成”章节找到示例代码,通常只需添加几行配置。

Q9: 我已经在用TensorBoard/W&B了,能迁移过来吗?A9: 完全可以,而且过程平滑。SwanLab提供了转换工具:

  • TensorBoard:使用swanlab sync_tensorboardswanlab sync_tensorboardX命令,指定你的TensorBoard日志目录,即可将历史实验同步到SwanLab。
  • Weights & Biases:使用swanlab sync_wandb命令,并提供W&B的API Key和项目路径。
  • MLFlow:使用swanlab sync_mlflow命令。 这些工具会读取原有日志,并在SwanLab中创建一个包含所有历史数据的新实验,方便你进行统一管理和对比。

5.5 私有化部署问题

Q10: 自托管部署后,客户端如何连接?A10: 在客户端代码中,或通过环境变量,指定你自托管服务器的地址:

import swanlab swanlab.init( project="my-project", host="http://your-swanlab-server.com", # 你的自托管服务器地址 api_key="your-selfhosted-api-key" # 在自托管后台创建的API Key )

或者通过环境变量:

export SWANLAB_HOST=http://your-swanlab-server.com export SWANLAB_API_KEY=your-selfhosted-api-key

Q11: 自托管版本的数据存储在哪里?A11: 取决于你的部署方式。在Docker Compose部署中,数据通常保存在你映射的本地卷(volume)中,包括PostgreSQL数据库的数据文件和上传的实验文件(如图片、模型)。务必定期备份这些卷。

最后,如果遇到文档中没有涵盖的奇怪问题,第一选择是查看 GitHub Issues ,很可能已经有人提出并解决了。如果还没有,提交一个包含详细错误日志和复现步骤的Issue,社区和开发团队通常响应很快。记住,清晰的错误描述和日志是快速解决问题的关键。

http://www.jsqmd.com/news/799539/

相关文章:

  • 可微分仿真在四旋翼高速避障中的关键技术解析
  • AlphaGo 核心技术拆解与实战演练
  • Python自动化与数据抓取工具箱:从网络请求到分布式爬虫实战
  • 芯片设计中的稀疏矩阵困境:生态断点与SoC开发破局
  • 从平移、投影到旋转:知识表示模型Trans系列与RotatE的演进之路
  • 谷歌机器人战略复盘:从安卓梦想到RaaS转型的十年启示
  • 【BLE MIDI实战】从零构建跨平台兼容的蓝牙MIDI硬件:规范、模块与代码解析
  • BaiduPCS-Go深度解析:从原理到实践的性能调优进阶指南
  • 边缘计算与AI驱动:2019年技术底层逻辑重塑与产业变革
  • MSO与FPGA如何重塑嵌入式系统调试:混合信号测试实战解析
  • .NET开发者如何优雅地处理CAD图纸?基于netDxf的DXF文件读写与数据转换实战
  • 论文降AI教程:从底层算法到实操,5款降AI工具与3大微调技巧
  • 基于微信小程序的民宿短租系统(30292)
  • ARM Firmware Suite与µHAL架构解析及嵌入式开发实践
  • 零配置SQLite MCP服务器:让AI助手安全操作数据库
  • 39. 组合总和
  • 智能音箱隐私安全深度解析:从唤醒词到数据流,如何与AI助手安全共处
  • LitGPT:从零实现LLM,打造透明可控的大模型全流程工具箱
  • 开源记忆系统mem0:AI智能体与知识管理的向量化核心引擎
  • OpenAI API 协议学习
  • GPU内核优化技术:R3框架原理与实践
  • FPGA/CPLD数字系统设计实战:从器件选型到调试验证的工程指南
  • 如何快速搭建微信机器人:WeixinBot完整使用指南
  • 汽车LED热管理:原理、测量与CFD仿真实践
  • GitOps工作流模式:自动化基础设施和应用部署
  • 模块化IC设计流程:应对复杂芯片挑战的解决方案
  • 优化ESP32 ADF 音频问题
  • Arm嵌入式C/C++库架构与Semihosting机制解析
  • 5分钟快速上手:如何用Video2X免费AI工具让老旧视频焕发4K新生
  • 为什么92%的数据分析师还没用上Gemini Sheets功能?—— 一份被谷歌官方忽略的AI分析落地清单