Loading... ## 前言 场景: 在PVE下, 需要在虚拟机中使用核显, 因此使用自带的LXC容器引擎, 在为其直通宿主机(intel)核显并在其中部署Docker应用调用核显加速计算. ## 容器创建 基于LXC容器引擎, 部署基于Debian12的容器 Step1: 登录PVE的WebUI, 选择`pve`节点, 然后点击`创建CT` ![创建CT](https://zoe.red/usr/uploads/2024/01/1457950852.png) Step2: 分别设置主机名, *取消勾选* 无特权容器, 设置此lxc的root用户密码; 然后点击下一步 ![常规](https://zoe.red/usr/uploads/2024/01/3516695089.png) Step3: 模板选择Debian12, 然后点击下一步 ![模板选择](https://zoe.red/usr/uploads/2024/01/1971660990.png) 补充: 模板检索与下载, 以下载到local存储节点为例, 如图所示, 最后5处选择Debian12模板后, 点击右下角的`下载`开始下载 ![模板](https://zoe.red/usr/uploads/2024/01/1252406482.png) ![下载输出](https://zoe.red/usr/uploads/2024/01/2480384471.png) Step4: 选择磁盘位置与允许使用的大小(上限), 然后点击下一步 ![磁盘](https://zoe.red/usr/uploads/2024/01/4006452514.png) Step5: 设置CPU使用核心数, 根据需要分配, 这里修改为6; 然后点击下一步 ![CPU](https://zoe.red/usr/uploads/2024/01/2826724387.png) Step6: 内存上限可以设置大些(实际运行只会占用很少, 不用担心设置大了RAM不够分), 交换分区可以根据需要设置; 然后点击下一步 ![内存](https://zoe.red/usr/uploads/2024/01/3723780688.png) Step7: 分别设置容器的IP/网关信息, 然后*取消勾选*防火墙选项, 避免莫名远程访问问题; 然后点击下一步 ![网络设置](https://zoe.red/usr/uploads/2024/01/2845934304.png) Step8: * `DNS`页面保持模拟, 然后点击下一步 * `确认`页面检查下配置, 确认没有问题后,点击完成开始创建LXC容器 ![确认](https://zoe.red/usr/uploads/2024/01/3148847698.png) ![创建输出](https://zoe.red/usr/uploads/2024/01/936925211.png) --- ## 核显直通 上一步已经创建好了一个Debian12的特权LXC容器, 下面通过命令行更新当前容器配置文件: * 主要添加些集显相关设备组和集显设备本身 上面我们创建的LXC容器ID为`110`, 那么按照如下操作更新配置后 * 注意: 容器中的ID要根据自己的实际进行修改 ```bash # 以LXC容器ID为110为例 vim /etc/pve/lxc/110.conf """ 追加 # 1. 集显加速 lxc.apparmor.profile: unconfined lxc.cgroup.devices.allow: a lxc.cap.drop: lxc.cgroup2.devices.allow: c 226:0 rwm lxc.cgroup2.devices.allow: c 226:128 rwm lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file """ ``` 点击PVE节点, 然后点击shell, 在弹出的webui命令行终端中执行上述命令与编辑 ![image.png](https://zoe.red/usr/uploads/2024/01/686724369.png) 至此, 基于LXC容器创建的Debian12环境直通/映射intel核显已经成功了, 此时可以启动容器了进行进一步的操作. --- ## 可选操作 为了便于使用与后续配置,可能还需要进行如下配置 * 允许root用户ssh远程连接 * Debian12替换国内源 设置root允许ssh远程登录 ```bash # 修改设置, 允许root的ssh远程连接 sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config service ssh restart ``` Debian12替换国内源: (清华源为例) ```bash # 备份配置 mv /etc/apt/sources.list /etc/apt/sources.list.backup # 清华源: vim /etc/apt/sources.list """ # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware # deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware """ # 更新 apt update ``` --- ## 效果验证 LXC容器通过编辑配置文件完成集显设备直通(映射)后, 下面我们基于Docker部署Jellyfen在线流媒体应用, 验证集显直通是否成功. *集显查询工具* * 为了了解集显的实时使用情况, 还需要再宿主机或容器内安装`intel_gpu_top`工具 ```bash # 安装 apt update apt install intel-gpu-tools # LXC容器内,直接执行 intel_gpu_top # PVE宿主机上, 如果配置了SR-IOV虚拟核显, 需要指定真实的核显相关参数 # 否则可能遇到这类错误提示: "Kernel 4.16 or newer is required for i915 PMU support." lspci | grep VGA # 查看真实显卡地址, 一般不需要修改 intel_gpu_top -d sys:/sys/devices/pci0000:00/0000:00:02.0 ``` PVE宿主机配置配置了SR-IOV虚拟核显, 有四个虚拟核显设备, 第一条为真实的核显 ![image.png](https://zoe.red/usr/uploads/2024/01/2920123435.png) 集显未使用时: intel_gpu_top输出 ![集显未使用时输出](https://zoe.red/usr/uploads/2024/01/358968707.png) --- *Docker部署* * 完成Docker环境安装以及portainer的安装 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="http://zoe.red/2024/174.html" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://zoe.red/usr/uploads/2024/01/4021144246.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Docker部署</p> <div class="inster-summary text-muted"> 前言折腾homelab, 很多时候都需要用到docker部署各类的Apps, 这里记录下快速配置过程.部署一键安装... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> *jellyfen部署* * 基于portainer的web端完成部署: * 浏览器端输入LXC容器的http://IP:9000, 完成用户名与密码设置后进入设置/管理页面 * 第一步如图一: 准备容器创建 * 第二步如图二/三/四/五: 编辑Jellyfen相关配置: 设置容器名/镜像/端口映射/挂载磁盘路径映射/重启策略/集显设备映射 图一: 容器创建准备 ![准备创建容器](https://zoe.red/usr/uploads/2024/01/1007085514.png) 图二: 设置容器名/镜像/端口映射 * 容器名: `nyanmisaka/jellyfin:latest` ![设置容器名/镜像/端口映射](https://zoe.red/usr/uploads/2024/01/1245359404.png) 图三: 设置磁盘卷映射 * 假定我们已经提前lxc容器的中创建好了共享本地目录`mkdir -m 777 -p /share/media`, 并在其中存放了测试视频 ![设置磁盘卷映射](https://zoe.red/usr/uploads/2024/01/147466371.png) 图四: 重启策略设置"除非停止" ![重启策略: 除非停止](https://zoe.red/usr/uploads/2024/01/3169311239.png) 图五: 添加集显设备映射, 并开始部署 ![添加集显设备映射, 并开始部署](https://zoe.red/usr/uploads/2024/01/1743542260.png) 稍等一分钟, 容器状态会由`staring`变为`healthy,` 着急可以手动刷新下查看变化; * 确认变为healthy后, 此时可以通过lxc容器ip地址在浏览器访问`http://ip`, 开始Jellyfen的初始化 ![image.png](https://zoe.red/usr/uploads/2024/01/2908991249.png) *Jellyfen初始化应用* * 过程无特殊, 可以参考各类视频/博客 * 注意: 添加一个电影文件夹: 路径为前面设置的`/media`目录 *验证实时转码:* * 设置中启用了`硬件加速` * 设置`缩小影片分辨率`或者选择`不支持的音/视频编码`视频播放 图一: 开启硬件加速 ![开启硬件加速](https://zoe.red/usr/uploads/2024/01/4020871125.png) 图二: 测试视频4k调低分辨率到720p,触发转码, 实时集显使用情况 ![4K视频硬件转码](https://zoe.red/usr/uploads/2024/01/1616580898.png) THE END 本文作者:将夜 本文链接:http://zoe.red/2024/176.html 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。 最后修改:2024 年 02 月 27 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏
3 条评论
[...]PVE8.1下-LXC容器创建与核显直通 - 雨中漫步 (zoe.red)[...]
博主你好,请问你有遇到lxc中docker硬解转码(jellyfin、immich)内存不释放的问题吗。具体表现为jellyfin中转码播放时,拖动进度条,内存就涨快1g,多拖几次就爆满;退出播放视频,甚至重启lxc,但pve显示的内存占用仍是那么多,并不会释放(immich转码结束占用的内存也是一样不释放)。6.5内核+i915 sriov驱动,核显拆分过。降级到6.2内核没这些问题,但想升到6.5或者6.8来用,因为装24.04的ubuntu来用,想用同样6.8的内核。或者除了i915-sriov-dkms,还有别的驱动可用吗。
你4.24号不是通过更换i915解决问题了吗 现在我也遇到这个问题了 内存泄漏加内存溢出 这个问题我通过升级pve版本加内核解决了 但现在的问题是解码占满就卡死 甚至连宿主机都直接卡死了