news 2026/10/17 3:56:06

单卡A800 80GB部署Qwen-Image-2.1:GPUStack文生图与图像编辑实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单卡A800 80GB部署Qwen-Image-2.1:GPUStack文生图与图像编辑实战

1. 为什么要在单卡 A800 上折腾 Qwen-Image-2.1

一张 A800 80GB 能干什么?放在两年前,大家的第一反应是“跑个 7B 到 13B 的大语言模型推理绰绰有余”。但放到今天,当多模态生成模型开始往 20B 参数级别狂奔的时候,单卡 80GB 显存到底还能不能撑住一个完整的图像生成加图像编辑流水线,就成了一个很实际的问题。我手头正好有一张 A800 80GB 的卡,又碰上了 Qwen-Image-2.1 这个模型发布,于是花了大概一个周末的时间,把从环境准备、GPUStack 部署、模型加载、文生图推理到图像编辑这一整条链路全部跑了一遍。这篇文章就是这次折腾的完整记录,包含了我踩过的坑、验证过的参数、以及一些在官方文档里不太容易找到的实操细节。

先说清楚这个项目到底在做什么。Qwen-Image-2.1 是一个支持文本到图像生成以及图像编辑的多模态扩散模型,它的参数规模不小,官方给出的显存占用在 FP16 精度下大概在 40GB 到 60GB 之间浮动,具体取决于分辨率、批大小和是否启用某些加速策略。A800 80GB 的显存容量刚好卡在一个“能跑但需要精打细算”的位置上。GPUStack 则是一个用来管理和调度 GPU 资源的工具,它可以把模型部署成服务,对外暴露 API 接口,方便后续调用。整个项目的目标就是:在一张 A800 80GB 上,用 GPUStack 把 Qwen-Image-2.1 部署起来,然后通过 API 完成文生图和图像编辑两个核心任务。

适合谁来参考这篇文章?如果你手里有一张 80GB 显存级别的卡(A800、A100 80GB、H100 80GB 都算),想跑一个中等规模的多模态生成模型,但又不想折腾多卡分布式推理,那这篇内容应该能帮你省下不少时间。如果你只是用 24GB 或 48GB 的卡,那这篇文章里的部分参数可能需要下调,但整体思路和排查方法依然有参考价值。另外,如果你对 GPUStack 这个工具还不熟悉,文章里也会把部署过程中涉及的关键配置讲清楚。

2. 环境准备与 GPUStack 部署的完整流程

2.1 硬件与驱动环境的确认

在开始部署之前,先把基础环境确认一遍。我用的机器配置是单张 A800 80GB PCIe 版本,CPU 是 Intel 至强系列,内存 256GB,系统盘是 NVMe SSD。操作系统选的是 Ubuntu 22.04 LTS,这个版本对 NVIDIA 驱动和容器运行时的兼容性比较成熟,社区里遇到问题也容易搜到解决方案。

驱动方面,我装的是 NVIDIA 驱动 550 系列,CUDA 版本是 12.4。这里有一个细节需要注意:Qwen-Image-2.1 依赖的某些算子对 CUDA 版本有最低要求,如果 CUDA 版本低于 12.1,可能会在加载模型时遇到算子不兼容的报错。你可以用nvidia-smi确认驱动版本,用nvcc --version确认 CUDA 版本。如果 CUDA 版本不对,建议先升级驱动和 CUDA 工具链,不要试图在旧版本上硬跑,后面会出各种奇怪的问题。

提示:A800 的驱动安装和普通消费级卡没有本质区别,但如果你用的是云服务商提供的实例,驱动和 CUDA 通常是预装好的,只需要确认版本即可。如果是自己装机器,建议用官方 runfile 方式安装驱动,避免 apt 源里的版本过旧。

确认完驱动之后,还需要检查 Docker 和 NVIDIA Container Toolkit 是否安装。GPUStack 的部署方式支持多种后端,我选择的是 Docker 方式,因为隔离性好,清理起来也方便。安装 NVIDIA Container Toolkit 的命令大概是这样:

# 添加官方仓库并安装 nvidia-container-toolkit distribution=$(. /etc/os-release; echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker

装完之后用docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi验证一下,如果能正常输出显卡信息,说明容器运行时配置没问题。

2.2 GPUStack 的安装与初始化配置

GPUStack 的安装方式有好几种,我选的是 Docker Compose 方式,因为配置文件一目了然,后续调整参数也方便。先创建一个工作目录,然后写一个docker-compose.yml文件。这里的关键配置包括端口映射、数据卷挂载和 GPU 资源声明。

version: "3.8" services: gpustack: image: gpustack/gpustack:latest container_name: gpustack ports: - "8080:80" - "10190:10190" volumes: - ./data:/var/lib/gpustack - /models:/models environment: - GPUSTACK_TOKEN=your_token_here deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] restart: unless-stopped

几个关键点解释一下。端口 8080 映射到容器内的 80 端口,这是 GPUStack 的 Web 管理界面入口。10190 是模型服务对外暴露的端口,后面调用 API 的时候会用到。数据卷把本地的./data目录挂载到容器内的/var/lib/gpustack,这样配置和日志不会因为容器重启而丢失。/models目录用来存放下载好的模型权重文件,建议提前规划好磁盘空间,Qwen-Image-2.1 的权重文件大概在 40GB 左右,加上缓存和临时文件,预留 100GB 比较稳妥。

GPUSTACK_TOKEN这个环境变量是用来做 API 鉴权的,你可以自己生成一个随机字符串。如果不设置,GPUStack 会默认生成一个,但为了后续调用方便,建议自己指定一个。

启动命令就是标准的docker compose up -d。启动之后用docker logs -f gpustack看一下日志,如果看到类似 “GPUStack server started” 的输出,说明服务已经起来了。然后在浏览器里访问http://你的机器IP:8080,应该能看到 GPUStack 的登录界面。初始用户名和密码在日志里会打印出来,第一次登录后建议立刻修改。

2.3 模型权重的下载与放置

Qwen-Image-2.1 的权重文件可以从官方提供的渠道获取,下载方式通常是使用huggingface-cli或者modelscope的命令行工具。我这边用的是huggingface-cli,因为下载速度还算稳定。下载之前先确认磁盘空间,然后执行:

# 安装 huggingface-cli pip install huggingface_hub # 下载模型权重到指定目录 huggingface-cli download Qwen/Qwen-Image-2.1 --local-dir /models/Qwen-Image-2.1 --local-dir-use-symlinks False

下载过程可能会持续比较久,取决于网络带宽。下载完成后,检查一下目录结构,确保包含config.json、model.safetensors或者分片的权重文件、tokenizer相关文件等。如果权重文件是分片的,GPUStack 在加载时会自动合并,不需要手动处理。

注意:下载过程中如果中断,重新执行命令会断点续传,但有时候会出现文件损坏的情况。建议下载完成后用sha256sum校验一下关键文件的哈希值,或者至少确认文件大小和官方给出的一致。

把权重放到/models/Qwen-Image-2.1之后,回到 GPUStack 的 Web 界面,在“模型”页面点击“添加模型”,选择“本地路径”方式,把路径填进去。GPUStack 会自动识别模型类型和所需的运行环境。如果识别失败,可能需要手动指定模型架构为qwen-image或者类似的标识。

3. 模型加载与推理参数的核心细节

3.1 显存占用的估算与精度选择

Qwen-Image-2.1 在 FP16 精度下的显存占用是我最关心的问题。根据我的实测,模型权重本身大约占用 42GB 左右的显存,加上推理过程中的激活值、KV Cache 和中间张量,峰值显存会到 55GB 到 65GB 之间。A800 80GB 的卡在大部分情况下是够用的,但如果你把分辨率拉到 1024x1024 以上,或者批大小超过 2,就有可能出现显存不足的报错。

这里有一个取舍:要不要用 FP8 或者 INT8 量化来降低显存占用?我试过 FP8 量化版本,显存占用确实能降到 30GB 左右,但生成质量会有肉眼可见的下降,尤其是在细节纹理和文字渲染方面。如果你对生成质量要求不高,或者需要同时跑多个任务,FP8 是一个可选项。但如果追求最佳效果,还是建议用 FP16 原精度,然后通过控制分辨率和批大小来管理显存。

精度权重显存占用峰值显存占用生成质量推荐场景
FP16约 42GB55-65GB最佳单任务高质量生成
FP8约 22GB30-38GB略有下降多任务并发或显存紧张
INT8约 20GB28-35GB下降明显对质量要求不高的批量任务

在 GPUStack 的模型配置页面,可以指定dtype参数为float16或bfloat16。A800 对 bfloat16 的支持很好,而且 bfloat16 在数值稳定性上比 float16 更有优势,不容易出现 NaN 或者梯度爆炸的问题。我最终选择的是 bfloat16,实测下来生成质量稳定,显存占用和 float16 基本一致。

3.2 推理参数对生成效果的影响

模型加载起来之后,下一步就是调推理参数。Qwen-Image-2.1 暴露出来的关键参数包括num_inference_steps、guidance_scale、seed、width、height等。这些参数不是随便填的,每一个都会直接影响生成结果和显存占用。

num_inference_steps控制去噪步数,默认值是 50。步数越多,生成质量通常越好,但推理时间也越长。我实测下来,30 步是一个性价比比较高的选择,再往上提升就不明显了。如果你赶时间,20 步也能出可用的结果,但细节会稍微糊一点。

guidance_scale是分类器自由引导的强度,默认值是 7.5。这个参数控制生成结果和文本提示词的对齐程度。值太低,生成结果会偏离提示词;值太高,画面会变得过饱和、不自然。我一般会在 6.0 到 8.0 之间调整,具体取决于提示词的复杂程度。如果提示词很具体,比如“一只戴着红色帽子的柴犬在雪地里奔跑”,那 7.0 左右比较合适;如果提示词比较抽象,比如“未来城市”,那可以调到 8.0 到 9.0,让模型更有想象力。

seed是随机种子,固定种子可以复现相同的生成结果。这个在调试阶段很有用,你可以固定种子,然后只改一个参数,观察变化。等参数调好了,再放开种子,让每次生成都有随机性。

分辨率和显存的关系非常直接。512x512 的显存占用大概在 50GB 左右,768x768 会到 58GB,1024x1024 就接近 65GB 了。如果你要生成 1024x1024 以上的图,建议把批大小设为 1,并且关闭一些不必要的缓存选项。A800 80GB 跑 1024x1024 单张图是没问题的,但如果你要批量生成,就需要排队或者降分辨率。

3.3 GPUStack 中的模型服务配置

在 GPUStack 里,模型部署好之后,可以配置成服务对外提供 API。这里有几个关键配置项需要留意。首先是max_concurrent_requests,这个参数控制同时处理的请求数。A800 80GB 跑 Qwen-Image-2.1 的时候,我建议设为 1 或者 2,设太高会导致显存溢出。其次是request_timeout,图像生成比较耗时,默认的 30 秒可能不够,建议调到 120 秒或者更长。

GPUStack 的 API 接口兼容 OpenAI 的格式,所以你可以用类似调用 GPT 的方式来调用它。文生图的接口大概是/v1/images/generations,图像编辑的接口可能是/v1/images/edits,具体路径以 GPUStack 的文档为准。请求体里需要包含model、prompt、size、n等字段。

import requests import base64 url = "http://你的机器IP:10190/v1/images/generations" headers = { "Authorization": "Bearer your_token_here", "Content-Type": "application/json" } payload = { "model": "Qwen-Image-2.1", "prompt": "一只戴着红色帽子的柴犬在雪地里奔跑,背景是松树林,阳光透过树枝洒下来", "size": "1024x1024", "n": 1, "response_format": "b64_json" } response = requests.post(url, headers=headers, json=payload) result = response.json() image_data = base64.b64decode(result["data"][0]["b64_json"]) with open("output.png", "wb") as f: f.write(image_data)

这段代码可以直接跑,把 IP、端口和 token 替换成你自己的就行。返回的图片是 base64 编码的,解码后保存成 PNG 文件。

4. 文生图与图像编辑的实操过程

4.1 文生图任务的完整执行记录

我第一次跑文生图的时候,用的提示词是“一座漂浮在云端的未来城市,建筑表面有发光的蓝色线条,黄昏时分,暖色调”。分辨率设的是 768x768,步数 30,guidance_scale 7.5。从发出请求到拿到图片,总共花了大概 18 秒。这个速度在单卡上算是可以接受的,毕竟模型规模摆在那里。

生成出来的第一张图整体构图不错,但建筑表面的发光线条不够明显,而且黄昏的暖色调偏暗。我把 guidance_scale 调到 8.5,重新生成了一次,这次线条的亮度上来了,但画面整体有点过曝。最后我把 guidance_scale 定在 8.0,同时在提示词里加了“柔和的暖光”,第三张图的效果就比较满意了。

这里有一个经验:Qwen-Image-2.1 对提示词里的光照描述比较敏感。如果你想要某种特定的光照效果,最好在提示词里明确写出来,比如“逆光”、“侧光”、“柔光”、“硬光”等。模型对“黄昏”、“清晨”这类时间描述的理解有时候会偏,加上具体的光照词汇能显著提升效果。

另外,生成 1024x1024 的图时,我注意到显存峰值会到 63GB 左右,离 80GB 还有一定余量,但如果你同时开着其他进程,比如 Jupyter Notebook 或者监控工具,就要小心了。我建议在跑大图之前,先用nvidia-smi看一下当前显存占用,确保有足够的空闲显存。

4.2 图像编辑功能的调用方式

Qwen-Image-2.1 的图像编辑功能是我觉得比较有意思的部分。它支持基于文本指令对输入图像进行修改,比如“把背景换成海滩”、“给人物加上一副墨镜”、“把白天改成夜晚”。调用方式和文生图类似,但需要额外传入一张输入图像。

import requests import base64 url = "http://你的机器IP:10190/v1/images/edits" headers = { "Authorization": "Bearer your_token_here", "Content-Type": "application/json" } with open("input.png", "rb") as f: image_base64 = base64.b64encode(f.read()).decode("utf-8") payload = { "model": "Qwen-Image-2.1", "image": image_base64, "prompt": "把背景换成海滩,保持人物不变", "size": "1024x1024", "n": 1, "response_format": "b64_json" } response = requests.post(url, headers=headers, json=payload) result = response.json() edited_image_data = base64.b64decode(result["data"][0]["b64_json"]) with open("edited_output.png", "wb") as f: f.write(edited_image_data)

图像编辑的显存占用比纯文生图要高一些,因为需要同时加载输入图像的特征和生成新的图像。我实测下来,1024x1024 的编辑任务峰值显存会到 68GB 左右,比文生图多了大概 5GB。如果你要编辑更大尺寸的图,比如 2048x2048,那 80GB 可能就不太够了,需要考虑降分辨率或者用 FP8 量化。

编辑效果方面,背景替换类的任务完成度比较高,边缘处理也比较自然。但涉及到人物面部细节修改的时候,有时候会出现五官轻微变形的情况。我的经验是,在提示词里尽量用“保持人物面部特征不变”这样的约束语句,能减少变形的概率。另外,输入图像的质量也很重要,如果输入图本身分辨率很低或者噪点很多,编辑结果也会受影响。

4.3 批量生成与队列管理

如果你需要批量生成一批图,比如做数据集或者做设计素材,那就涉及到队列管理的问题。GPUStack 本身支持请求排队,但默认的队列长度可能不够。你可以在配置里调整max_queue_size参数,我一般设成 10 到 20,再多的话等待时间就太长了。

批量生成的时候,建议把n参数设为 1,然后通过循环发送多个请求,而不是把n设成 5 或 10。因为单次请求生成多张图会一次性占用大量显存,容易导致溢出。循环发送请求虽然总时间差不多,但显存占用是波动的,峰值更低,更稳定。

我跑过一个 50 张图的批量任务,每张 768x768,步数 25,总共花了大概 15 分钟。平均下来每张 18 秒左右,和单张生成的速度基本一致,说明 GPUStack 的队列调度没有引入太多额外开销。如果你要跑更大的批量任务,建议写一个脚本,把提示词列表读进来,然后逐条发送请求,同时记录每张图的生成参数和耗时,方便后续复盘。

5. 常见问题与排查技巧实录

5.1 显存不足的典型表现与解决方法

显存不足是单卡跑大模型最常见的问题。表现通常有两种:一种是直接报CUDA out of memory错误,请求失败;另一种是生成过程中突然卡住,然后进程被系统杀掉。第一种情况比较好排查,看日志就能定位;第二种情况比较隐蔽,有时候是显存碎片化导致的,重启服务就能恢复。

解决显存不足的思路有几个。最直接的是降分辨率,从 1024x1024 降到 768x768,显存占用能减少 10GB 左右。其次是降批大小,把n设为 1。如果还不行,就考虑用 FP8 量化版本。另外,GPUStack 里有一个enable_vae_slicing的选项,开启之后 VAE 解码会分片进行,能省下几个 GB 的显存,但推理时间会稍微增加。

注意:如果你在 Docker 里跑 GPUStack,容器内的显存监控可能不准。建议在宿主机上用nvidia-smi -l 1实时观察显存变化,这样能更准确地判断峰值出现在哪个阶段。

还有一个容易被忽略的点是:PyTorch 的缓存分配器会预留一部分显存不释放。如果你发现显存占用一直居高不下,可以设置环境变量PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,让分配器更灵活地管理显存碎片。这个设置在我的环境里效果比较明显,长时间跑批量任务的时候,显存占用曲线更平稳。

5.2 生成质量不稳定的排查思路

生成质量不稳定表现为同一组参数下,有时候出图很好,有时候出图很差。这个问题可能由多个因素导致。首先是随机种子的影响,如果你没有固定种子,每次生成的结果本来就会不一样。建议在调试阶段固定种子,等参数调好了再放开。

其次是提示词的歧义性。Qwen-Image-2.1 对提示词的理解能力虽然不错,但如果提示词里有相互矛盾的描述,比如“明亮的夜晚”,模型就会困惑,生成结果也会不稳定。我的经验是,提示词尽量用具体、一致的描述,避免抽象和矛盾的词汇。

还有一个因素是模型的加载精度。如果你用的是 FP8 量化版本,生成质量的波动会比 FP16 大。如果你对稳定性要求高,建议用 FP16 或 bfloat16 原精度。另外,GPUStack 在加载模型时如果显存紧张,可能会自动做一些优化,这些优化有时候会影响生成质量。你可以在日志里确认一下模型加载时用了哪些优化选项。

问题表现可能原因排查方法解决措施
出图模糊步数太少检查 num_inference_steps调到 30 以上
画面过饱和guidance_scale 太高检查 guidance_scale降到 7.0 左右
提示词不生效提示词有歧义简化提示词用具体描述替换抽象词
生成结果随机种子未固定检查 seed 参数固定种子调试
细节丢失精度太低检查 dtype换回 FP16

5.3 服务稳定性与长时间运行的注意事项

长时间跑推理服务,稳定性是个大问题。我遇到过几次服务在跑了几个小时后突然无响应的情况,排查下来发现是显存泄漏导致的。PyTorch 在某些情况下会保留一些中间张量不释放,时间长了就把显存吃满了。解决办法是定期重启服务,或者用 GPUStack 的健康检查功能,设置一个显存阈值,超过就自动重启。

另外,日志管理也很重要。GPUStack 的日志默认会一直追加,如果不做轮转,磁盘很快就会被写满。建议在 Docker Compose 里配置日志轮转,限制单个日志文件的大小和保留数量。

logging: driver: "json-file" options: max-size: "100m" max-file: "5"

这样配置之后,每个日志文件最大 100MB,最多保留 5 个,总共不超过 500MB,足够日常排查用了。

还有一个实操心得:如果你要长时间跑服务,建议把 GPUStack 的restart策略设为unless-stopped,这样即使容器意外退出,也会自动重启。同时,在宿主机上设置一个定时任务,每天凌晨低峰期重启一次服务,能有效避免显存泄漏积累的问题。

5.4 API 调用中的常见错误与处理

调用 API 的时候,最常见的错误是超时。图像生成本身耗时较长,如果request_timeout设得太短,请求就会在生成完成之前被断开。我建议把超时设成 180 秒,给足余量。另外,如果你是通过公网调用,网络延迟也会影响超时判断,这种情况下可以把超时再调大一些。

另一个常见错误是鉴权失败。GPUStack 的 token 如果包含特殊字符,在 HTTP 头里传输的时候可能会被转义,导致鉴权失败。建议 token 只用字母和数字,避免特殊符号。如果你在日志里看到 401 错误,先检查 token 是否正确,再检查请求头格式是否符合规范。

返回结果解析失败也是一个坑。有时候 API 返回的是流式响应,但你的代码是按普通 JSON 解析的,就会报错。建议先打印出原始响应内容,确认格式后再写解析逻辑。GPUStack 的 API 文档里会说明哪些接口支持流式,哪些不支持,调用之前先看一眼能省不少事。

6. 一些实操之后的个人体会

这张 A800 80GB 跑 Qwen-Image-2.1 的体验,整体来说是“够用但需要精打细算”。80GB 显存看着很大,但模型权重一加载就吃掉一半多,剩下的空间要留给激活值、KV Cache 和图像解码,真正能灵活调配的余量其实不多。如果你打算长期跑这个模型,我建议把分辨率控制在 768x768 到 1024x1024 之间,批大小设为 1,这样稳定性最好。

GPUStack 这个工具在模型管理和 API 暴露方面确实省了不少事,但它的默认配置偏保守,需要根据实际硬件情况调整。尤其是超时时间和并发数这两个参数,默认值在我的场景下都不太够用,调大之后体验好了很多。

图像编辑功能比我预期的要好,背景替换和风格迁移类的任务完成度很高,但精细的面部修改还有提升空间。如果你要做人像相关的编辑,建议多试几组提示词,找到最稳定的表达方式。

最后分享一个小技巧:在提示词里加上“高清”、“细节丰富”、“专业摄影”这类质量描述词,对生成效果的提升比较明显。Qwen-Image-2.1 对这类词汇比较敏感,加上之后出图的锐度和细节都会好一些。但这个技巧也不是万能的,如果提示词本身描述就不清楚,加再多质量词也没用。核心还是把主体、场景、光照、风格这几个要素写清楚,剩下的交给模型就行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 3:55:48

散料整列设备:从原理到应用落地,一文讲透零件自动排序

做设备这几年,被工厂老板问得最多的一句话不是“这台机器多少钱”,而是“我这个零件,能不能整列?”。电子厂的屏蔽罩、贴片电感、连接器端子,五金厂的小螺丝、冲压件、弹簧,塑胶厂的齿轮、瓶盖、异形卡扣……

作者头像 李华
网站建设 2026/10/17 3:55:41

LoRA低秩微调实战:一张消费级显卡搞定大模型领域适配

前段时间我想把一个 7B 规模的开源对话模型微调成某个垂直领域的问答助手。一开始我老老实实走全量微调路线,数据还没灌进去,显存先红了半张卡——光是 AdamW 的优化器状态就要额外吃下几十GB,消费级显卡在这里基本是摆设。后来我认真啃完了 …

作者头像 李华
网站建设 2026/10/17 3:55:33

AI视频提示词模板实战指南:从意图坍缩到结构化生成

1. 这不是“抄提示词”,而是构建AI内容生产底层逻辑的实操手册你手头正压着一个短视频脚本, deadline是明天中午;你刚收到客户发来的模糊需求:“要科技感强一点,但别太冷,带点人情味”;你打开某…

作者头像 李华
网站建设 2026/10/17 3:54:57

FlowNet2实战:从零搭建稠密光流估计与视频处理应用

光流估计这件事,我在做视频插帧和运动分析的项目里绕不开。早期用过块匹配和Lucas-Kanade那套经典方法,小位移还行,一旦物体动得快一点、边缘纹理弱一点,结果就糊成一片。后来接触到FlowNet系列,尤其是FlowNet2&#x…

作者头像 李华
网站建设 2026/10/17 3:54:42

artcraft复盘:程序化生成如何重塑数字艺术工艺管线

先说清楚一件事:我第一次看到“artcraft”这个名字时,以为又是某个做AR滤镜的创业项目,后来才发现它其实是一个数字艺术创作工作台的名字——准确说,是一套把“手工艺思维”和“算法生成工具”揉在一起的自研管线。如果你也受够了…

作者头像 李华
网站建设 2026/10/17 3:54:41

老系统部署Qt应用:静态编译环境安装与qt-xcb插件避坑指南

简介:面向 Linux 下 Qt 图形界面程序开发者,这是一份基于 Qt 5.9.9 在 CentOS 7.6 x64(GCC 4.8.5、glibc 2.17)环境中完成的静态编译资源包。使用其中库文件编译出的程序通过 ldd 查看时不再依赖 Qt 动态库,适合需要将…

作者头像 李华