PixInsight 优化指南

PixInsight 最好玩的地方不是图像处理,而是跑分[doge]。

注:本文内容仅供参考,每台电脑的硬件配置和软件环境均不一样,如因遵循本文而造成你电脑出现任何问题,本人盖不负责 🙂

前言

跟其他专业图像处理软件相比较,PixInsight 更能吃电脑资源,甚至可以说你有多少它就能吃多少,在特定的处理任务之下,常见的 HEDT 配置都能被 PI 吃满。这并不是说 PI 的效率不高,而是跟深空图像后期的特点有关:大量文件同步校准、对齐、叠加,16bit、32bit 甚至 64bit 图像文件的修改,甚至还有专门玩超大型马赛克拼接、听到有几亿像素的主亮场就兴奋的赛博疯子。遇到这些情况,一般电脑玩家的电脑自然叫苦不迭。

想追求更快的处理速度,最好最快的方法肯定就是充钱升级。CPU超频、内存超频也不错,我曾经花过几天来研究和折腾,提升幅度也是可见的。但如果不考虑硬件升级和超频,只从软件方面着手优化PI 和环境配置,电脑跑 PI 能更快吗?

答案是可以的。

PI 的操作可以大致分为两个类型:预处理和后期处理。在预处理阶段(校准、对齐、叠加), PI 需要对大量文件进行处理然后生成新的文件,这时候 PI 主要吃处理器的多核能力和内存容量;而后期处理(反卷积、拉伸、锐化、降噪等)则更吃处理器的单核能力和 Swap 交换分区传输速度。如果想知道 PI 在自己电脑下的处理能力,最简单而有效的方法是使用 PI 自带的官方跑分脚本( Script – Benchmarks – PixInsight Benchmark)。打开脚本然后点击 Run Benchmark 就可以安心等待结果了。

官方的跑分程序会下载一组素材,进行预处理和后期处理,再根据处理时长来计算 CPU 得分和 Swap 得分,最后结合两者分数计算出一个总得分。在一定程度上(鸭哥的电脑除外),这个跑分可以客观地看作你电脑跑 PI 性能的指标。

S82tU.png

你可以将特定跑分结果上传到 PI 官网,然后在数据库中和其他用家上传的得分进行对比。

在实操中,我们大致可从以下三方面着手优化:

  • 更换操作系统
  • 调整SWAP 交换分区文件夹
  • 启用显卡 CUDA 加速

更换操作系统

具体来说,是将操作系统更换为 PI 的亲儿子, Linux 系统。用 MacOS 的可以忽略这节内容了。

根据官方 FAQ,PI 是在 Red Hat Enterprise Linux Workstation 7.4 下以 C++ 语言开发的,然后再以 Linux 版本为基础移植到 Windows、Mac 和 FreeBSD 平台。开发组指出, Linux 版本的 PI 最稳定、功能最丰富(?),通常来说也能发挥最好的性能。

以我自己的硬件平台(AMD 5900x + 128GB DDR4 3200)测试出来的结果来看,在 Ubuntu 22.04 下,CPU 的得分会比 Windows 11 Pro 下高出约 15%。你也可以在官方跑分数据库中可以看出, Linux 平台的 CPU 得分一般都会比 Windows 高,无论用的是 Intel 还是 AMD。

S86jY.png

S8XWv.png

知识所限,我无法得知这个差距到底是“PI 原生 vs 移植”还是由“Linux vs Windows”哪个原因带来的,但是 PI 的 CPU 处理性能在这两个系统下确实有普遍的、显著的差别。

别看这只有 10% 到 20% 的差距,如果是处理大型素材,确实能省不少时间。我以前在 Windows 下遇到的闪退等问题,在 Linux 版本下也不复存在。

况且,你不用花一分钱就能享受这个10% CPU 性能的提升 :)

当然,Linux 系统有一定的使用门槛,加上很多我们日常使用的软件都没有 Linux 版本,因此普通用家全面更换到 Linux 肯定是不现实的。以我为例,我是安装了双系统,处理图片的时候用 Kubuntu,打游戏日常使用的时候就用 Win。

啊对了,还有一个换到 Linux 的理由:根据我的印象经验,另一个常用的深空图像处理软件 Astro Pixel Processor 的 Linux 版也比 Windows 版快……好像是。

调整 Swap 交换分区文件夹

OK,如果换 Linux 不现实的话,那么“调整 PI 的 Swap 交换分区文件夹”这个操作,在所有平台上都能用,而且优化效果显著。此方法的唯一限制是,如果你只使用 HDD 机械硬盘而不是 SSD 或 Ramdisk,那可能无法带来性能上的提升。

首先我们来认识一下 PI 的 Swap 交换分区的运行原理。

Swap 本来是 Linux 系统特有的名称,你可以理解为 PS 里面的缓存文件夹。从 PI 打开一张图片后,对这张图片进行修改(裁切、拉伸、锐化、降噪等操作)之后,PI 会在 Swap 文件夹中写入一次进行保存。这张图像被修改多少次,PI 就会在 Swap 写多少次。当你执行 undo 操作的时候,PI 就会读取 Swap 文件夹里面的缓存文件。因此,这个 Swap 文件夹的读写速度,对 PI 的总体运行速度有很关键的影响。你处理的图像体积越大,这个影响就越明显。

而 PI 的 Swap 系统有一个关键的特性:如果你设置数量为 n 的 Swap 文件夹,那么 PI 在写入文件缓存时会先将单个文件切割为 n 个分块然后再同时将这些分块分别写入各个 Swap 文件夹。 undo 的时候,PI 也会同时从各个 Swap 文件夹中读取所有分块。这个可以看作 Swap 读写的“多线程”特性。

目前主流的 PCIE 4.0×4 Nvme 固态硬盘在利用 PI 这个特性的情况下,都可以跑满理论上的读写带宽。例如我的西数 sn850 2T 固态,在 PI 下 Swap 就能跑到超过 5000MB/s 的理论写入速度。

但是问题来了,PI 的默认设置只有一个 Swap 文件夹!

如果不去主动修改,我电脑在 PI 下“单线程”的 Swap 读写大约只有 1500MB/s,还不到理想跑分的1/3!

所以啊,这个优化操作对固态硬盘来说就非常必要了。

S8ugq.jpg

设置的方法也不复杂:点击 Edit 菜单,点击 Global Preferences,点选 Directories and Network,点击 Add 添加新的 Swap 文件夹。记得点击左下角的圆形保存设置,然后重启 PI 才算正式生效。

你可以添加同一个文件夹作为 Swap 文件夹,也可以添加不同的文件夹,甚至还可以添加 Ramdisk 文件夹。

那么问题又来了:应该添加多少个 Swap 文件夹呢?

这里其实没有标准答案,因为每台电脑的配置不同,不能一概而论。如果是用固态硬盘,那么我推荐的调试方法是:

  1. 设置 4 个 Swap,用 PixInsight Benchmark 跑5次分,计算平均 Swap 分数;
  2. 设置 6 个 Swap,用 PixInsight Benchmark 跑5次分,计算平均 Swap 分数;
  3. 设置 8 个 Swap,用 PixInsight Benchmark 跑5次分,计算平均 Swap 分数;
  4. 如此循环反复到大概 24 个 Swap,找到最高的 Swap 分数,然后用回最高分的设置。

如果用的是传统机械硬盘,那么可能只需要设置两个 Swap 就够了,原因是机械硬盘基本上没有多路同时读写的能力。

除此之外,Global Preferences 内的 Parallel Processing and Threads 标签页里还有一个关于多线程读写的设置: Maximum number of file reading / writing threads。为什么这里又有一个控制文件多线程读写的设置呢?

S8Isc.jpg

这就很让人迷惑了。既然你 PI 默认就开 8 个多线程文件读写,为什么又默认只有 1 个 Swap 文件夹呢?或许是要照顾还在用机械硬盘的用户?

不过无论怎样都好,这个设置的调整同样会影响整体 Swap 读写速度。我的建议也是一样的,多调整几次,记录下最高得分,然后使用那个设置。

最后说说要不要设置 Ramdisk 作为 Swap。Ramdisk 是在内存划分出一部分空间作为虚拟文件夹,DDR 4 内存的传输带宽会比传统的机械硬盘和 Sata 固态快十数倍,然而跟目前主流的 PCIE 4.0 Nvme 固态动辄 5000 甚至 7000MB/s 相比优势不算大,而且还会占用稀缺的内存容量。因此,只有在你拥有大容量内存和使用非 PCIE 4.0 固态的情况下,设置 Ramdisk Swap 才有实际意义。

启用显卡 CUDA 加速

换 Linux 系统能带来约 10% 的 CPU 得分提升,优化 Swap 能带来三四倍的 Swap 得分提升,那么启用显卡的 CUDA 加速则可以为某些操作带来最多十倍的提升。

想要获得这个性能提升,必须同时符合以下三个条件:

  • 使用 Nvidia GTX 9 系列或更新的显卡,而且支持 CUDA 核心加速;
  • 使用 Windows 或者 Linux 操作系统;
  • 在 PI 使用 Starnet、Starnet2、StarXTerminator、NoiseXTerminator 和 BlurXTerminator 等操作。

Windows 下的启用方法,教主在南方天文的微信号上已经讲得非常清晰和详细了,这里无需重复,感兴趣的可以点击这里学习:提速9倍!用显卡给你的PixInsight加速吧!

S8Cor.jpg

这是我电脑启用了显卡 CUDA 加速后,SXT 和 Starnet2 处理图片的速度。显卡是 RTX 3090。

而 Linux 系统下启用显卡 CUDA 加速的方法则稍微有点不同。我之前折腾了两三个晚上,幸好终于给我捣鼓成功。具体方法如下:

1, 安装 CUDA & cudnn

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin

$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600

$ wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb

$ sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb

$ sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/

$ sudo apt-get update

$ sudo apt-get -y install cuda

$ sudo apt install libcudnn8

Done.

2, 安装 libtensorflow-gpu

先下载 libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz

$ sudo tar -C /usr/local -xzf libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz

$ sudo ldconfig /usr/local/lib

转到文件夹 /opt/PixInsight/bin/lib

$ sudo mkdir /opt/temp

$ mv libtensorflow* /opt/temp

$ export TF_FORCE_GPU_ALLOW_GROWTH="true"

Done.

PS: Linux 下安装 StarnetV2 的方法(不这样安装的话 PI 会找不到插件)

$ sudo chown root:root StarNet2-pxm.so
$ sudo chmod 775 StarNet2-pxm.so
$ sudo chown root:root StarNet2_weights.pb
$ sudo chmod 775 StarNet2_weights.pb
$ sudo mv StarNet2-pxm.so /opt/PixInsight/bin
$ sudo mv StarNet2_weights.pb /opt/PixInsight/bin

打开 PixInsight: Process menu -> Modules -> Install Modules
点击 "Search",看到 Starnet 2 出现,然后点击 "Install"

Done.

End.

8 thoughts on “PixInsight 优化指南

  1. 匿名 says:

    我换了192线程的霄龙9654,CPU不能完全调用,只有1,3W分,尝试了各种设置,是不是在win11下,PI不能调用这么多线程?

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注