Skip to content

JupyterLab

概述

JupyterLab 是智川云容器实例内置的交互式开发环境,支持 Notebook、终端、文件管理等功能。

注意

JupyterLab 默认工作目录为 /root,文件浏览器默认不显示隐藏文件。如需显示隐藏文件,或将默认打开目录改为 /,可参考下文常见问题中的说明,通过 SSH 远程连接 手动修改。

访问方式

通过控制台 → 实例列表 → 快捷工具 → JupyterLab 进入。

进入 JupyterLab

界面说明

JupyterLab 界面主要包含文件浏览器、编辑区和终端等功能区域。

JupyterLab 界面

主要功能

上传文件

点击左上角的上传按钮,选择本地文件即可上传到当前目录。

上传文件

提示

JupyterLab 仅支持单文件上传。如需上传文件夹或大文件,请使用 SCP/rsync 方式。

使用 Notebook

在 Launcher 中点击 Python 3 图标创建新的 Notebook,适合交互式数据分析和模型调试。

打开终端

在 Launcher 中点击 Terminal 图标打开命令行终端。

打开终端

终端窗口

后台运行

JupyterLab 中打开的终端或 Notebook,关闭标签页后默认仍在后台运行,不会被终止。可在左侧栏找回之前的会话。

后台运行

文件管理

在文件浏览区右键点击文件,可进行重命名、删除、下载等操作。

文件管理

查看日志

打开日志控制台(View → Show Log Console)可实时查看输出日志。

日志控制台

如未显示日志,请启用调试模式。

调试模式

常见问题

Notebook 日志不更新

问题: 运行程序一段时间后,刷新网页发现日志不再更新。

解决: 打开日志控制台(View → Show Log Console)查看实时日志。

建议

长时间训练任务建议使用终端配合 守护进程 运行,并将日志重定向到文件。

JupyterLab 无法打开

  1. 确认实例处于「运行中」状态
  2. 更换为 Chrome 浏览器
  3. 尝试强制刷新页面(Ctrl+Shift+R / macOS:Cmd+Shift+R)
  4. 清除浏览器缓存后重试
  5. 检查系统盘空间是否充足
  6. 尝试重启实例

没有终端选项

问题:Launcher 中没有 Terminal 选项。

原因:浏览器兼容性问题。

解决:更换为 Chrome 浏览器,清除缓存后重试。如仍无法解决,使用 SSH 远程连接 作为替代方案。

删除文件后磁盘空间未释放

问题: 删除文件后,磁盘空间没有减少。

原因: JupyterLab 删除文件时默认将文件移入垃圾桶(.Trash 目录),而非真正删除。垃圾桶仍占用磁盘空间,需手动清理。

第一步:定位垃圾桶

不同磁盘的垃圾桶位置不同,以下是常见位置:

磁盘垃圾桶路径(通常位置)
系统盘/root/.local/share/Trash
数据盘/root/rivermind-data/.Trash-0
文件存储/root/rivermind-fs/.Trash-0

如果上述路径不存在,可用 find 命令搜索:

bash
# 查找所有 Trash 目录
find / -name "*Trash*" -type d 2>/dev/null

# 或在指定磁盘下查找
find /root/rivermind-data -name ".Trash*" -type d 2>/dev/null

第二步:查看占用空间

bash
# 列出目录内容(包括隐藏文件)
ls -a /root/rivermind-data/

# 查看各垃圾桶大小
du -sh /root/.local/share/Trash 2>/dev/null
du -sh /root/rivermind-data/.Trash-0 2>/dev/null
du -sh /root/rivermind-fs/.Trash-0 2>/dev/null

# 查看某个目录下所有文件大小(包括隐藏文件),按大小排序
du -sh /root/rivermind-data/.[!.]* /root/rivermind-data/* 2>/dev/null | sort -hr | head -20

第三步:清理垃圾桶

bash
# 清空系统盘垃圾桶
rm -rf /root/.local/share/Trash

# 清空数据盘垃圾桶
rm -rf /root/rivermind-data/.Trash-0

# 清空文件存储垃圾桶
rm -rf /root/rivermind-fs/.Trash-0

如何避免此问题

删除文件时直接使用终端 rm 命令,文件不会进入垃圾桶,空间立即释放:

bash
rm -rf /path/to/file
命令参数说明
  • ls -a:列出所有文件,包括以 . 开头的隐藏文件(如 .Trash-0
  • du:查看文件/目录磁盘占用大小
    • -s:只显示汇总大小,不逐个列出子目录
    • -h:以人类可读格式显示(如 1.5G200M
  • rm:删除文件或目录
    • -r:递归删除目录及其内容
    • -f:强制删除,不提示确认
  • find:在指定路径下搜索文件或目录
    • -name:按名称匹配(支持通配符 *
    • -type d:只搜索目录类型
  • .[!.]*:匹配以 . 开头的隐藏文件(排除 ...
  • sort -hr:按大小从大到小排序
  • head -20:只显示前 20 条结果
  • 2>/dev/null:隐藏错误信息(路径不存在时不报错)

如何显示隐藏文件

可通过 SSH 远程连接 修改。

显示隐藏文件通常需要同时满足两层配置:

  1. 服务端允许访问隐藏文件
  2. JupyterLab 文件浏览器启用隐藏文件显示

如果只改其中一层,页面上可能仍然看不到隐藏文件。

bash
PY=/venv/bin/python
[ -x "$PY" ] || PY="$(command -v python3 || command -v python)"

"$PY" - <<'PY'
from pathlib import Path
import json
import re

cfg = Path('/root/.jupyter/jupyter_server_config.py')
cfg.parent.mkdir(parents=True, exist_ok=True)
text = cfg.read_text() if cfg.exists() else ''
if 'c = get_config()' not in text:
    text = ('c = get_config()\n' + text.lstrip('\n')) if text.strip() else 'c = get_config()\n'

line = 'c.ContentsManager.allow_hidden = True'
pat = r'(?m)^\s*c\.ContentsManager\.allow_hidden\s*=.*$'
text = re.sub(pat, line, text) if re.search(pat, text) else text + ('' if text.endswith('\n') else '\n') + line + '\n'
cfg.write_text(text)

settings = Path('/root/.jupyter/lab/user-settings/@jupyterlab/filebrowser-extension/browser.jupyterlab-settings')
settings.parent.mkdir(parents=True, exist_ok=True)
data = {}
if settings.exists() and settings.read_text().strip():
    data = json.loads(settings.read_text())
data['showHiddenFiles'] = True
settings.write_text(json.dumps(data, ensure_ascii=False, indent=2) + '\n')
PY

执行完成后,请重启一次实例,再重新进入 JupyterLab。

如何修改默认启动目录为 /

可通过 SSH 远程连接 修改。以下命令会先把 /tmp/init.sh 里的 --notebook-dir 改成 /,再从原脚本中读取 JupyterLab 启动命令重新拉起服务,避免手工维护整串启动参数。

谨慎操作

将默认目录改为 / 后,文件浏览器会显示系统目录和隐藏文件。请勿随意修改或删除 /bin/etc/usr/root/.ssh 等路径下的内容。

bash
tmp=$(mktemp)
sed -E 's#--notebook-dir=[^[:space:]]+#--notebook-dir=/#' /tmp/init.sh > "$tmp"
cat "$tmp" > /tmp/init.sh
rm -f "$tmp"

nohup sh -c '
pkill -x jupyter-lab >/dev/null 2>&1 || true
sleep 1
. /etc/profile >/dev/null 2>&1 || true
cmd=$(sed -n "/jupyter-lab \\\\/,/ServerApp.authenticate_prometheus=False/p" /tmp/init.sh)
eval "$cmd"
' >/tmp/jupyter-manual.log 2>&1 </dev/null &

echo scheduled

执行完成后,等待几秒再检查:

bash
grep -a 'Serving notebooks from local directory: /' /tmp/jupyter-manual.log

如果仍未生效,请重启一次实例后再重新进入 JupyterLab。实例重启后如恢复默认值,可再执行一次上述命令。

智算无疆 川流不息