从Intel到Apple Silicon Mac的转变是一笔巨大的交易,但一些人认为这一转变是开发人员的损失,特别是那些依赖虚拟化的人,如Docker。令人担忧的是,在x86仿真而不是虚拟机管理程序的情况下,性能可能会受到很大影响。
无论情况如何,我的观点是问题不会那么严重,而开发者的好处是巨大的,特别是对那些主要为苹果生态系统开发的人来说。如果我的预感是正确的,那么这个生态系统很快就会扩展到服务器端。听我解释。
澄清一下,我是Docker的超级粉丝,我是一名ML实践者,主要在Linux的服务器端工作,所以我非常熟悉开发机器与服务器端保持一致的重要性。有趣的是,我会说这是苹果为Mac准备ARM的最大理由,那就是让开发环境与他们的部署目标完全相同,比如OS、iPadOS、Apple Watch、Apple TV,很快还会有MacOS。
也就是说,目前的情况是,Xcode开发是在x86上进行的,在x86模拟器中进行仿真,并为ARM重新构建以进行设备部署。这是自第一代iPhone和苹果(据我所知)以来一直出色地保持这一过程的无懈可击的状态,但更多的边缘情况开始涌现。
从我对ML的狭隘观点来看,我体验到的一个问题是,苹果的神经引擎(ANE)在加速模型推理方面缺乏仿真。一旦模型被编译成CoreML,仿真器将在CPU和可能的GPU上执行模型,但是当卸载到ANE时,它在设备上的行为是不同的。这不仅是性能差异,还包括浮点差异和可能的量化细微差异。
这意味着要在苹果设备上真正测试ML模型的行为,必须将其部署到实际设备上,很可能是通过电缆进行调试。正如您所猜到的,这也意味着如果要针对不同的型号进行测试,您必须拥有多个物理设备。再加上不同的iOS版本进行测试,很快就会失控。如果苹果想(也很可能计划)增加更多定制硬件,对苹果和它的开发者来说,情况都是站不住脚的。
有了ARM(和其他定制芯片)在开发机器上,我们已经知道iOS应用程序将在本地运行,因此不需要仿真器。如果这些应用程序在单独的虚拟化实例中运行,尽可能创建与实际设备相同的行为,我不会感到惊讶。苹果可以将硬件资源和功能虚拟化,这样性能也会得到忠实的仿真,极大地简化了开发人员的开发、测试和调试过程。
对于安来说,这一转变将是巨大的。与ANE相比,在CPU上运行ML模型时,人们不得不处理“数字差异”,这是一个通过捆绑设备进行调试的过程。由于Mac与目标设备具有相同的硬件,因此存在一致性,没有隐藏的惊喜。无论开发周期缩短,不透明的差异消除,这都是一件好事。
如果没有虚拟机管理程序,Docker会变得慢2到5倍,这有什么不好呢?虽然这确实是一个缺点,但我认为对于本地Docker实例,它们更适合用于功能测试,而不是核心开发周期的一部分。来自Python世界的我,在原生操作系统中开发软件没有任何问题,在部署之前只使用本地Docker进行验证。Docker在本地启动服务器集群的另一个主要用例将会较慢,但同样,不应该是开发周期的核心部分。总是有远程Docker甚至更好的选项,部署到沙箱和集成环境进行测试。
这就把我带到了Mac的ARM过渡的最后一点,这是为服务器端开发的方面,而不是苹果关注的领域。但是,如果Docker和虚拟化需求主要用于服务器端开发,并且为了保持一致,如果苹果提供基于ARM的云服务器,就可以解决x86仿真的问题。拥有这种统一性将真正使开发人员能够在他们的arm Mac上编写代码,跨设备进行本地测试,并部署到iOS设备和服务器端,所有这些都是从一个代码库开始的,而无需转换、仿真或隐藏的陷阱。如果你问我,对于苹果开发人员来说,这是一幅非常美好的风景。
自从很多年前我买了我的钛金MacBook Pro以来,我一直是苹果软硬件结合的粉丝,但更重要的是,它对他们产品开发的长期态度。这种ARM Mac的过渡已经酝酿了很长时间,作为一个人,我再次兴奋地购买了一台ARM MacBook,以及它将带来的未来。