百度AI Studio无sudo权限下运行PaddleDetection SOLOv2推理全流程踩坑记录

百度 AI Studio 无 sudo 权限下运行 PaddleDetection SOLOv2 推理全过程记录

环境说明

  • 平台:百度 AI Studio(Jupyter 容器环境)
  • 用户:aistudio(无 sudo 权限)
  • 项目:PaddleDetection SOLOv2

一、启动 Tailscale 实现远程 SSH 连接

无 sudo 权限下,使用 userspace 模式运行 Tailscale 守护进程:

bash 复制代码
cd ~/.tail
./d --tun=userspace-networking --socks5-server=localhost:1055 \
  --socket=$HOME/.local/share/.ts/d.sock \
  --statedir=$HOME/.local/share/.ts &

启动后会看到大量日志,末尾出现 NeedsLogin 状态属于正常现象,执行登录命令:

bash 复制代码
./ts --socket=$HOME/.local/share/.ts/d.sock up

点击终端输出的链接,用 GitHub 账号完成认证。

常见警告说明(无需处理):

  • TPM: error opening:容器无硬件 TPM,不影响功能
  • failed to force-set UDP buffer size:无 root 权限,使用内核默认值,仅影响吞吐量
  • Tailscale is stopped:登录前的正常初始状态

二、SSH 密钥配置(无法修改密码)

容器环境 /etc/shadow 只读,passwd 命令会报错:

复制代码
passwd: Authentication token manipulation error

解决方案:使用 SSH 密钥免密登录

本地 Windows 生成密钥对:

powershell 复制代码
ssh-keygen -t ed25519

将公钥写入远程机器:

bash 复制代码
mkdir -p ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

公钥文件位于本地 C:\Users\用户名\.ssh\id_ed25519.pub


三、运行 SOLOv2 推理报错逐步排查

3.1 SyntaxError:Non-ASCII character

报错:

复制代码
SyntaxError: Non-ASCII character '\xe8' in file tools/infer.py on line 201,
but no encoding declared

原因: 项目含有中文注释,Python 2 需要显式声明编码。

修复: 批量为所有 py 文件添加编码声明:

bash 复制代码
grep -rl $'\xe6\|\xe8\|\xe7\|\xe9\|\xe5' /home/aistudio/work/ppdet/ \
  --include="*.py" | while read f; do
  head -1 "$f" | grep -q "coding" || \
    sed -i '1s/^/# -*- coding: utf-8 -*-\n/' "$f"
done

3.2 ImportError:No module named numpy

报错:

复制代码
ImportError: No module named numpy

原因: 当前 Python 环境未安装依赖,且 pip 命令不在 PATH 中。

排查:

bash 复制代码
find / -name "pip*" -type f 2>/dev/null | grep bin

发现系统存在 conda 环境:

复制代码
/opt/conda/envs/python35-paddle120-env/bin/pip

修复: 激活对应 conda 环境:

bash 复制代码
source /opt/conda/etc/profile.d/conda.sh
conda activate python35-paddle120-env

3.3 ImportError:libpython3.7m.so.1.0 not found

报错:

复制代码
ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

修复: 设置动态库路径后再运行:

bash 复制代码
export LD_LIBRARY_PATH=/opt/conda/envs/python35-paddle120-env/lib:$LD_LIBRARY_PATH

或直接通过 conda activate 激活环境,让 conda 自动处理库路径。


3.4 AssertionError:data() 仅支持静态图模式

报错:

复制代码
AssertionError: In PaddlePaddle 2.x, we turn on dynamic graph mode by default,
and 'data()' is only supported in static graph mode.
So if you want to use this api, please call 'paddle.enable_static()' before this api.

原因: 项目基于 PaddlePaddle 1.x 静态图 API 编写,但环境安装的是 2.x 版本,默认开启动态图模式。

方案一(推荐):tools/infer.py 中添加 paddle.enable_static()

bash 复制代码
sed -i '/from paddle import fluid/i paddle.enable_static()' tools/infer.py

验证修改:

bash 复制代码
head -50 tools/infer.py | grep -n "paddle"

方案二: 降级 PaddlePaddle 至 1.x:

bash 复制代码
pip install paddlepaddle==1.8.5

四、完整运行命令

bash 复制代码
source /opt/conda/etc/profile.d/conda.sh
conda activate python35-paddle120-env
export LD_LIBRARY_PATH=/opt/conda/envs/python35-paddle120-env/lib:$LD_LIBRARY_PATH
cd ~/work
python tools/infer.py -c configs/solov2/solov2_r50_fpn_8gpu_3x.yml \
  --infer_dir=./test_imgs/

总结

问题 原因 解决方案
passwd 报错 容器 /etc/shadow 只读 改用 SSH 密钥认证
Non-ASCII SyntaxError Python 2 需声明编码 sed 批量添加 # -*- coding: utf-8 -*-
pip 找不到 PATH 未包含 conda bin conda activate 激活环境
libpython3.7m.so 缺失 LD_LIBRARY_PATH 未设置 export LD_LIBRARY_PATH=...
data() 静态图报错 PaddlePaddle 1.x 项目跑在 2.x 上 添加 paddle.enable_static()
相关推荐
摄影图1 天前
蓝色光效科技背景图片素材 多场景设计
人工智能·科技·aigc·贴图·插画
AI视觉网奇1 天前
3d 打印拆分零件
人工智能·深度学习
月诸清酒1 天前
62-260515 AI 科技日报 (Qwen3.6 模型推理速度再提升,MTP加速至1.8倍)
人工智能
云和数据.ChenGuang1 天前
FastText的核心优势
人工智能·深度学习·机器学习·数据挖掘·边缘计算
大强同学1 天前
Gemini cli 登录异常解决办法
人工智能
做萤石二次开发的哈哈1 天前
怎样通过接口模糊检索语音文件名称?
人工智能·语音识别
b***25111 天前
动力电池自动生产线的工艺逻辑与运维要点
大数据·人工智能
拓朗工控1 天前
视觉检测连接工控机:打通智能制造“感知-决策”闭环的核心枢纽
人工智能·视觉检测·制造
weixin_428005301 天前
C#调用 AI学习从0开始-第1阶段(基础与工具)-第2天Prompt工程基础
人工智能·学习·c#·prompt
观测云1 天前
AI Coding 时代,可观测性为什么会从“运维工具”变成核心基础设施
人工智能·ai coding