百度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()
相关推荐
fthux8 小时前
装闭 RenoPit 源码解析(07):装修闭坑知识库与AI Prompt构建
人工智能·ai·开源·github·open source·renopit
zyplayer-doc10 小时前
VuePress类静态文档站和动态知识库怎么选:两种技术路线的适用场景
javascript·人工智能·后端·安全·智能手机
KKKlucifer11 小时前
拨开接口黑盒迷雾:运营商第三方合作接口安全审计与准入管控落地实践
网络·人工智能·安全
梦梦代码精11 小时前
连锁品牌数字化:从门店扩张到用户资产运营的技术底座
大数据·人工智能·低代码·docker·开源·代码规范
咕噜咕噜啦啦11 小时前
vLLM框架
人工智能·qwen·vllm
启雀AI11 小时前
AI 驱动的视频课程自动摘要与知识点提取:ASR + LLM 流水线工程实践
人工智能·阿里云·华为云·音视频·培训saas平台
Mac的实验室11 小时前
2026年8月最新实操:谷歌Gmail邮箱手机号注册扫码发短信提示“无法验证”怎么办?(附100%成功绕过指南)
人工智能
MindUp12 小时前
AI辅助PPT生成工具的内容组织能力实测:8款产品的文档解析与排版效果对比
人工智能
寒草12 小时前
【寒草呈献】当巴菲特走进 AI 投研助手
人工智能·架构