百度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()
相关推荐
Promise微笑31 分钟前
AI搜索时代的流量重构:GEO优化深度执行细节与把控体系
人工智能·重构
言萧凡_CookieBoty35 分钟前
比 Vibe Coding 更可怕的,是 Vibe Design 吧
人工智能·ai编程
Rick199341 分钟前
Spring AI 如何进行权限控制
人工智能·python·spring
Theodore_102244 分钟前
深度学习(15):倾斜数据集 & 精确率-召回率权衡
人工智能·笔记·深度学习·机器学习·知识图谱
IT_陈寒1 小时前
SpringBoot自动配置这破玩意儿又坑我一次
前端·人工智能·后端
TechubNews1 小时前
Base 发布首个独立 OP Stack 框架的网络升级 Azul,将是 L2 自主迭代的开端?
大数据·网络·人工智能·区块链·能源
啦啦啦_99991 小时前
1.机器学习概述
人工智能·机器学习
knight_9___1 小时前
RAG面试题5
人工智能·python·agent·rag
刘大猫.1 小时前
OpenAI通过两个开源模型GPT-OSS-120B和GPT-OSS-20B重新拥抱开放性
人工智能·gpt·大模型·openai·算力·gpt-oss-120b·gpt-oss-20b
EDPJ1 小时前
(2026|成电,超图,图文融合和对齐,高阶推理/将异常显式地推理为语义-结构一致性的违反)H2VLR:用于少样本异常检测的异构超图视觉语言推理
人工智能·计算机视觉·异常检测