尘土与星辰 -1992|第237章|静态编译与余量|中文
凌晨两点四十分。办公室的白炽灯管发出轻微的频闪,林尘盯着终端里缓慢滚动的编译日志。屏幕右下角的时间数字每跳动一次,左脚踝的钝痛就跟着加深一分。止痛贴的药效已经过了,皮肤表层留下一圈发白的胶痕,像一道干涸的河床。 他不能停。医院信息科那句“禁用外部驱动安装权限”
第237章 静态编译与余量
凌晨两点四十分。办公室的白炽灯管发出轻微的频闪,林尘盯着终端里缓慢滚动的编译日志。屏幕右下角的时间数字每跳动一次,左脚踝的钝痛就跟着加深一分。止痛贴的药效已经过了,皮肤表层留下一圈发白的胶痕,像一道干涸的河床。
他不能停。医院信息科那句“禁用外部驱动安装权限”意味着,所有依赖必须提前固化进运行环境。他放弃了常规的虚拟环境打包方案,转而用静态链接的方式,把CUDA运行时库、PyTorch核心模块和numpy底层C扩展全部编译进同一个目录。这会让安装包体积膨胀到近两个G,但能避开目标机器缺少管理员权限的致命坑。
conda-pack 跑完最后一行,终端跳出 Done.。林尘没有立刻放松。他拉过那台二手测试机,断开网络,拔掉所有外接设备,只插入一个格式化过的U盘。他把打包好的环境解压到D盘,新建一个 run.bat,写入启动命令。双击。
黑框弹出。进度条开始爬行。
10%... 30%... 60%...
风扇转速陡然拔高,机箱发出沉闷的嗡鸣。林尘盯着任务管理器,GPU占用率卡在42%,显存占用2.8G。没有溢出。没有报错。
85%... 98%... 100%。
终端输出:Inference complete. Latency: 192ms/sample.
林尘靠在椅背上,长长地吐出一口气。192毫秒,比预估的180毫秒慢了12毫秒,但在十五分钟的演示窗口内,完全在安全余量里。他拿起笔,在错题本上补了一行:第237条:离线环境依赖固化。风险:目标机系统权限锁死,动态库加载失败。对策:静态编译全量依赖,放弃体积优化,确保单机可运行。执行:本地沙箱验证通过,延迟可控。
苏曼从隔壁工位抬起头,眼底有血丝,但声音很稳:“前端界面打包好了。输入框做了防呆处理,只能粘贴纯文本。日志输出加了滚动缓冲,不会卡死主线程。你要不要过一遍?” “不用。”林尘站起身,左脚落地时微微一跛,他迅速把重心移到右腿,“逻辑你比我熟。现在做压力测试。连续跑两百条脱敏病历,看内存泄漏。” 苏曼点头,手指在键盘上敲下指令。屏幕上的日志开始瀑布般刷新。林尘走到窗边,推开半扇窗户。初秋的风灌进来,带着城市特有的尘土和尾气味道。他摸出烟盒,抽出一支,没点,只是夹在指间。
他想起十二年前在县城网吧,那台总是蓝屏的兼容机。为了跑通一个最简单的爬虫,他不得不把代码拆成十几段,手动拼接结果。那时候的容错率是零,断一次电,半天的功夫就白费。现在的环境好了太多,但底层逻辑没变:系统越封闭,变量越不可控,能依靠的只有自己提前铺好的路。技术不是炫技,是兜底。账上剩下的八千块钱撑不过下个月,小满的复查费、云服务器的续费、苏曼的底薪,全押在周二下午这两个小时里。他不能赌,只能算。
“内存曲线平稳,没有泄漏。”苏曼的声音把他拉回现实,“两百条跑完,耗时三十八分钟。平均延迟稳定在190毫秒上下。”
“够用了。”林尘走回桌前,把烟放回烟盒,“把演示流程拆成三步。第一步,导入测试数据,展示字段映射。第二步,点击运行,实时输出日志。第三步,导出结果,对比原始标注。每一步控制在四分钟内。如果中途卡死超过十秒,直接切备用方案,用CPU模式跑,不解释,不道歉。”
苏曼记下要点,抬头看他:“如果信息科的人问起模型架构呢?”
“只答输入输出和脱敏逻辑。不问不答,问深了就说涉及商业机密。”林尘拉开抽屉,拿出三个全新的U盘。两个装正式包,一个装纯CPU降级包。他用记号笔在盘身上写下编号:A-正式、B-正式、C-降级。又把绝缘胶带撕成小段,贴在每个U盘的金属接口处,防止插拔时短路。
凌晨四点。打包、校验、备份全部完成。林尘把硬盘和U盘装进一个硬壳防震盒,扣紧搭扣。他关掉主灯,只留一盏台灯。苏曼已经趴在桌上睡着了,呼吸均匀。林尘没有叫醒她。他轻手轻脚地收拾桌面,把错题本、备用网线、纸质手册一一码齐。最后,他看了一眼手机。屏幕亮起,显示周二上午7:30的闹钟。
他坐在椅子上,闭眼休息。左脚的痛感在静止中逐渐退潮,变成一种熟悉的、沉闷的酸胀。他知道,明天下午两点,那台隔离终端会像一道闸门。门后是院务会的目光,是合规审查的红线,也是公司账上最后八千块钱的生死线。没有退路,也不需要退路。他只需要把每一步踩实。
七点二十。闹钟响起。林尘准时睁开眼。 苏曼已经醒了,正在洗手间用冷水拍脸。两人没有多余的寒暄,各自检查装备。防震盒、纸质手册、备用网线、身份证。林尘穿上外套,把左脚鞋带系得比平时紧半格,用额外的压力固定住关节。
八点四十。两人抵达市第一人民医院。信息科在行政楼三楼,门禁森严。前台的保安核对预约单后,递来一张临时访客卡。林尘刷卡上楼,走廊里弥漫着消毒水和旧地毯混合的气味。信息科的门虚掩着,里面传出键盘敲击声。
推门进去,一个戴黑框眼镜的年轻工程师坐在工位上,头也没抬:“林总?终端在里间。先把东西过安检机,手机和私人U盘不能带进去。用我们提供的专用盘。” 林尘点头,把防震盒放进安检机。工程师递过来一个深蓝色的工业U盘,接口处有防拆封签。“内网机只认这个。格式是FAT32,最大支持4G文件。你们的包如果超了,自己想办法切分。”
林尘接过U盘,手指微微一沉。4G限制。他们的静态环境包加上测试数据,刚好卡在3.8G左右。但加上前端界面和日志缓存,很可能突破阈值。他迅速在脑子里过了一遍文件结构。前端资源可以压缩,测试数据可以删减冗余字段,但核心模型权重不能动。
“明白。”林尘说,“我们现场切分。” 工程师终于抬起头,看了他一眼,眼神里没什么情绪,只有公事公办的审视。“两点整开始。主任和副院长都在。别超时。” 林尘没说话。他拿着蓝色U盘走进里间。隔离终端已经开机,屏幕上是灰蓝色的Win10桌面。他插入U盘,系统识别正常。他打开资源管理器,开始复制文件。进度条缓慢推进。
复制到一半,终端突然弹出一个系统提示框:组策略限制:禁止运行未签名可执行文件。
林尘的手指停在半空。屏幕的冷光映在他脸上。他盯着那行字,呼吸平稳。没有慌乱,没有抱怨。他迅速调出打包时的配置文件,找到签名校验的开关。静态编译时为了省事,跳过了代码签名步骤。在内网严格策略下,这成了死穴。
他看了一眼时间。上午九点十五分。距离演示还有不到五个小时。
林尘拉开背包,拿出那台旧笔记本。没有外网,无法在线申请证书。他只能手动绕过策略,或者重新编译。他打开终端,输入 regedit。权限不足。他换了一条路:把可执行文件伪装成系统白名单内的脚本调用,用 pythonw.exe 作为宿主,绕过签名校验。
苏曼站在门口,看着他操作,没有出声。
林尘的指尖在键盘上快速敲击。一行行命令落下,像当年在漏雨的堂屋里,用铅笔在废报纸上推导数学题。没有魔法,只有拆解。他把 run.bat 重定向,把核心逻辑封装进 .py,用系统自带的解释器加载。保存。替换。重新运行。
进度条再次跳动。这一次,没有拦截。 林尘合上笔记本,把蓝色U盘重新插回终端。文件复制完成。他站起身,活动了一下僵硬的脖颈。左脚的痛感已经麻木,但他站得很稳。 “环境就绪。”他说。 苏曼点点头,把纸质手册放在终端旁边。 窗外的阳光移过窗棂,照在桌面上。灰尘在光柱里缓缓沉浮。林尘看着屏幕上的光标,知道真正的考验,才刚刚开始。两点整,闸门会准时落下。而他们,已经站在了门内。
More from WayDigital
Continue through other published articles from the same publisher.
Comments
0 public responses
All visitors can read comments. Sign in to join the discussion.
Log in to comment