百度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()
相关推荐
不加辣椒20 小时前
第12章 工具调用与 Agent 提示工程
人工智能
用户16931761726620 小时前
前端给AI消息做日期分组与时间线
人工智能
i晟20 小时前
Claude Code Harness 深度拆解:从你敲回车到模型回复,中间发生了什么
人工智能
用户252736278141 天前
【踩坑复盘】我在本地跑 RAG 知识库时踩了 5 个大坑,吐血整理避坑指南
人工智能
大模型真好玩1 天前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent
用户018349301691 天前
用Zustand管理AI多会话状态
人工智能
武子康1 天前
调查研究-198 Agent 到底该记住什么?读懂《What Must Generalist Agents Remember?》
人工智能·openai·agent
aqi001 天前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
武子康1 天前
调查研究-197 FAISS vs Elasticsearch 全面对比:从向量检索、全文搜索到 RAG 选型指南
人工智能·elasticsearch·agent