Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Discuss] [Deploy] 于Linux平台使用Docker部署BAAS之测试 #199

Open
MC-ALL opened this issue Dec 3, 2024 · 5 comments
Open

[Discuss] [Deploy] 于Linux平台使用Docker部署BAAS之测试 #199

MC-ALL opened this issue Dec 3, 2024 · 5 comments
Labels
新的议题 新的议题,用于后续提交PR

Comments

@MC-ALL
Copy link

MC-ALL commented Dec 3, 2024

宿主环境

  • OS: Arch Linux x86_64
  • Kernel: Linux 6.12.1-zen1-1-zen
  • DE: KDE Plasma 6.2.4
  • WM: KWin (Wayland)
  • CPU: 11th Gen Intel(R) Core(TM) i5-1135G7 (8) @ 4.20 GHz
  • GPU: Intel Iris Xe Graphics @ 1.30 GHz [Integrated]
  • Docker
    • Server Version: 27.3.1
    • Client Version: 27.3.1
    • Docker Compose Version: 2.31.0

测试环境

  • 蔚蓝档案
  • redroid/redroid:12.0.0-latest (Container)
  • ubuntu_novnc_test:latest (Container)

部署 redroid

docker-compose.yml 如下所示。
如遇打开 app 时卡网络检测,开关 - net.ipv6.conf.all.disable_ipv6=0 此项可临时解决。

services:
  redroid:
    image: redroid/redroid:12.0.0-latest
    stdin_open: true
    tty: true
    privileged: true
    container_name: redroid
    cap_add:
      - NET_ADMIN
      - NET_RAW
      - MKNOD
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
    ports:
      - 127.0.0.1:5555:5555 # ADB通訊埠,為加強安全性,設定為只監聽本機localhost的通訊埠
      - 127.0.0.1:5050:5050
    volumes:
      - ./redroid-12-data:/data # 資料存放在目前目錄下
      - /dev/net/tun:/dev/tun
    command:
      - androidboot.redroid_width=720 # 手機解析度
      - androidboot.redroid_height=1280
      - androidboot.redroid_dpi=320
      - androidboot.redroid_fps=60
      - androidboot.use_memfd=true
      - androidboot.redroid_net_ndns=1 
      - androidboot.redroid_net_dns1=223.5.5.5
      - androidboot.redroid_gpu_mode=host # 啟用宿主機的GPU硬體加速,host為啟用GPU加速,guest為軟體渲染
      - ro.product.cpu.abilist0=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi # 設定libndk相關
      - ro.product.cpu.abilist64=x86_64,arm64-v8a
      - ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
      - ro.dalvik.vm.isa.arm=x86
      - ro.dalvik.vm.isa.arm64=x86_64
      - ro.enable.native.bridge.exec=1
      - ro.dalvik.vm.native.bridge=libndk_translation.so
      - ro.ndk_translation.version=0.2.3

部署 ubuntu_novnc_test

Dockerfile 如下所示。
如需参考以下内容,务必确保硬碟剩余空间大于 12GB,网络畅通。

FROM ubuntu:latest

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y xvfb x11vnc novnc x11-apps git openbox libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-xinerama0 libxcb-xkb1 libsm6 libxkbcommon-x11-0 libdbus-1-3 && add-apt-repository -y ppa:deadsnakes/ppa && apt-get install -y python3.9 python3.9-venv

WORKDIR /home

RUN git clone https://gitee.com/pur1fy/blue_archive_auto_script.git

WORKDIR /home/blue_archive_auto_script

SHELL ["/bin/bash", "-c"]

RUN python3.9 -m venv env && source env/bin/activate && pip install -r ./requirements-linux.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --no-warn-script-location

ENTRYPOINT ["/bin/bash"]

docker-compose.yml 如下所示。
如需参考以下内容,redroid 容器务必于此容器前启动 ,否则此容器无法获取网络。

services:
  ubuntu:
    image: ubuntu_novnc_test:latest
    container_name: ubuntu_novnc_test
    tty: true
    stdin_open: true
    privileged: true
    network_mode: "container:redroid"
    # ports:
    #   - "127.0.0.1:5050:5050"
    #   - "127.0.0.1:5555:5555"
    volumes:
      - ./blue_archive_auto_script:/home/blue_archive_auto_script
    restart: on-failure

部署后

查看 redroid 容器日志,使用 logcat 。

sudo docker exec <Container ID> logcat

根据项目说明,使用相同显示方式,为利于使用,增加 noVNC 。

app --> Xvfb --> x11vnc --> noVnc --> websockify --> Host Browser 

进入 ubuntu 容器。

sudo decker exec -it <Container ID> bash

以下指令仅供测试,如需排障,请自行去除末尾参数。

Xvfb :7 -screen 0 1920x1080x24 -nolisten tcp >/dev/null 2>&1 &
export DISPLAY=:7
openbox >/dev/null 2>&1 &
x11vnc -listen 0.0.0.0 -rfbport 5900 -noipv6 -passwd password -display :7 >/dev/null 2>&1 &
websockify --web /usr/share/novnc 5050 localhost:5900 >/dev/null 2>&1 &
xclock

于浏览器键入 localhost:5050/vnc.html 进入 noVNC 页面,可以看见左上角用于测试的时钟。

source env/bin/activate
python window.py

终止时钟,运行脚本入口,于浏览器可以看见程式界面,使用 openbox 作为 WM 时可以拖拽或是全屏化界面。

附图

屏幕截图_20241203_172303

@Kiramei Kiramei added the 新的议题 新的议题,用于后续提交PR label Dec 3, 2024
@Kiramei
Copy link
Collaborator

Kiramei commented Dec 3, 2024

  1. 之前我测试软件包测试下载体积为7-8GB左右,大头在pytorch(被CNOCR依赖)依赖GPU运算方向库,如CUDA等。如果能够有更好的减小包的方法可能更好;
  2. 另一个优化分支是将Debian这个基类容器替换为BusyBox或者其他可用轻量级库;
  3. 经测试,docker-compose.yml 无法使用,adb连接的时候会失败。

宿主环境

  • OS: Ubuntu 24.04.1 LTS
  • Kernel: 6.8.0-49-generic
  • WM: X11 (Xorg)
  • DE: GNOME 46
  • CPU: 型号名称: 13th Gen Intel(R) Core(TM) i5-13600KF
  • GPU: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
  • Docker Version: 27.3.1
  • Docker Compose: 2.20.0

@MC-ALL
Copy link
Author

MC-ALL commented Dec 3, 2024

  1. 之前我测试软件包测试下载体积为7-8GB左右,大头在pytorch(被CNOCR依赖)依赖GPU运算方向库,如CUDA等。如果能够有更好的减小包的方法可能更好;

    1. 另一个优化分支是将Debian这个基类容器替换为BusyBox或者其他可用轻量级库;

    2. 经测试,docker-compose.yml 无法使用,adb连接的时候会失败。

宿主环境

* OS: Ubuntu 24.04.1 LTS

* Kernel: 6.8.0-49-generic

* WM: X11 (Xorg)

* DE: GNOME 46

* CPU: 型号名称: 13th Gen Intel(R) Core(TM) i5-13600KF

* GPU: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)

* Docker Version: 27.3.1

* Docker Compose: 2.20.0
  1. 包没什么优化余地,当然对于不需要或是没有 CUDA 的机器可以仅使用 CPU 版本的 torch 。
  2. 屏幕共享这种方式非常逆天,而且图形化界面需要的依赖非常多,到头来还不如用 FastAPI 之类的写一个 WebUI 简单。哪天我有空写个 Demo 看看效果。
  3. 没有日志,想帮也帮不了。可以进容器看看什么情况。

@Kiramei
Copy link
Collaborator

Kiramei commented Dec 3, 2024

  1. 之前我测试软件包测试下载体积为7-8GB左右,大头在pytorch(被CNOCR依赖)依赖GPU运算方向库,如CUDA等。如果能够有更好的减小包的方法可能更好;
2. 另一个优化分支是将Debian这个基类容器替换为BusyBox或者其他可用轻量级库;
3. 经测试,`docker-compose.yml` 无法使用,adb连接的时候会失败。

宿主环境

* OS: Ubuntu 24.04.1 LTS
* Kernel: 6.8.0-49-generic
* WM: X11 (Xorg)
* DE: GNOME 46
* CPU: 型号名称: 13th Gen Intel(R) Core(TM) i5-13600KF
* GPU: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
* Docker Version: 27.3.1
* Docker Compose: 2.20.0
  1. 包没什么优化余地,当然对于不需要或是没有 CUDA 的机器可以仅使用 CPU 版本的 torch 。

  2. 屏幕共享这种方式非常逆天,而且图形化界面需要的依赖非常多,到头来还不如用 FastAPI 之类的写一个 WebUI 简单。哪天我有空写个 Demo 看看效果。

  3. 没有日志,想帮也帮不了。可以进容器看看什么情况。

关于2,@rainux 写过一个cli的程序,基于这个Cli应该可以搞一份出来。webui,挺ok的应该。

@MC-ALL
Copy link
Author

MC-ALL commented Dec 4, 2024

@Kiramei
我查看了相关代码,以下是我的一些问题。

  1. 这个示例当中调用的 Baas_thread 对象 solve 方法的时候用子线程,Baas_thread 是没有线程调度相关功能吗?我查看代码后应该是在 Main 中获取线程对象然后在 GUIhomepage 中启动。
  2. config 相关的功能被放在 gui 文件夹下,其似乎与 GUI 耦合度不高,能单独使用吗?
  3. 大部分类别和函数都没有说明,看起来有点麻烦,能给个 BAAS 的基本启动需要和运行流程吗?

@Kiramei
Copy link
Collaborator

Kiramei commented Dec 5, 2024

  1. 对,传统的调用方法就是在main中进行调用的,调度的算法应该放在core/scheduler.py中。
  2. 这个config和UI的耦合度确实不高,我在一两个月前就有了把它移出来的想法,并且与其说是config,不如说是context。
  3. 这个后续会把文档完善,如果急的话可以问问 @pur1fying

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
新的议题 新的议题,用于后续提交PR
Projects
None yet
Development

No branches or pull requests

2 participants