找回密码
 会员注册
查看: 16|回复: 0

GPU虚拟化技术探索

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-10-9 15:25:39 | 显示全部楼层 |阅读模式
GPU虚拟化技术探索 欢迎关注 亚信科技新技术探索 亚信科技新技术探索 亚信科技(中国)有限公司 亚信科技的ICT前沿技术观点与行业洞见。展现亚信新技术与产品行业实践成果。 127篇内容 2024年08月30日 17:00 北京 编者荐语:随着人工智能、大数据分析和高性能计算技术的快速发展,GPU资源的高效利用成为企业关注的焦点。GPU虚拟化技术作为一项关键技术,能够显著提高资源利用率,降低硬件成本,并提供灵活的资源调度能力。本文分析了多种GPU虚拟化方式,期望为研究者和工程师们提供有价值的参考,助力其在相关领域的技术探索与应用。GPU虚拟化技术探索亚信科技(中国)有限公司摘要:本文深入探讨了GPU虚拟化技术在容器环境中的应用与管理,详细介绍了GPU虚拟化的背景与需求、主要目标、实现方式以及在云计算、深度学习、数据分析等领域的应用场景。此外,本文还对现有的GPU虚拟化技术进行了比较,探讨了各自的优缺点及适用场景,旨在为相关领域的研究和应用提供技术指导和借鉴。一前言随着人工智能(AI)、大数据分析、深度学习和高性能计算等新兴技术的发展,计算密集型任务和数据处理需求迅速增加。传统的以CPU为主的计算架构在面对这些需求时逐渐显得力不从心。GPU(图形处理单元)凭借其强大的并行计算能力,在大规模数据处理和复杂计算任务中表现出色。然而,由于GPU设备的高成本和管理复杂性,企业在利用GPU资源时面临诸多挑战。特别是在云计算环境中,如何高效地分配和管理GPU资源,确保资源利用率最大化,同时满足不同用户和应用的需求,成为一个亟待解决的问题。GPU虚拟化技术应运而生,通过将物理GPU资源虚拟化为多个逻辑GPU资源,使得多个应用可以共享同一物理GPU,从而提高资源利用率,降低硬件成本,并提供灵活的资源调度能力。GPU虚拟化的主要目标是通过软件技术,将物理GPU资源虚拟化为多个逻辑GPU资源,使得多个虚拟机或容器可以共享同一个物理GPU设备。这不仅可以提高GPU资源的利用率,降低企业的硬件投资和运维成本,还可以实现资源的按需分配和动态调整,支持多种应用场景和业务需求。在安全性方面,GPU虚拟化技术能够提供资源隔离,确保不同租户之间的互不干扰,满足多租户环境中的安全需求。同时,通过GPU虚拟化,可以简化资源管理,提高系统的灵活性和扩展性,为企业在云计算、深度学习、数据分析等领域的应用提供有力支持。二GPU虚拟化技术概述(一)GPU虚拟化的基本概念GPU虚拟化是指通过软件技术,将物理GPU资源虚拟化为多个逻辑GPU资源,以便多个虚拟机或容器能够共享同一个物理GPU设备。这种虚拟化技术包括以下几种主要方式: 直通(Pass through):将整个物理GPU设备直接分配给一个虚拟机或容器,适用于对GPU性能要求较高的应用,但缺乏灵活性和资源共享能力。 共享(Sharing):将物理GPU设备划分为多个逻辑单元,多个虚拟机或容器可以共享同一个GPU资源,实现了资源的共享和隔离,提高了资源利用率,适用于并发较高但对性能要求不高的应用,但在性能和隔离性方面存在一定的限制。 全虚拟化(Full Virtualization):通过软件模拟GPU硬件,使得虚拟机或容器可以独立运行,适用于对资源隔离和安全性要求较高的应用,但由于性能损耗较大,主要应用于对安全性要求较高的场景。 GPU池化(GPU Pooling):将多个物理GPU资源统一管理和调度,实现了资源的按需分配和动态调整,提供了更高的资源利用率和调度灵活性。(二)GPU虚拟化的发展历程GPU虚拟化技术经历了从简单虚拟化到任意虚拟化,再到远程调用和资源池化的发展历程。每一步的发展都带来了更高的资源利用率和更强的灵活性。图1:GPU虚拟化技术发展四阶段 简单虚拟化:将物理GPU固定切分,按2的N次方切分为多个vGPU。 任意虚拟化:将物理GPU从算力和显存两个维度按百分比切分为多个vGPU。 远程调用:AI应用与物理GPU服务器分离部署,允许通过高性能网络点对点远程调用GPU资源。 资源池化:统一的GPU资源调度管理平台;vGPU资源动态伸缩灵活调度;统一API接口,对接SDDC。(三)GPU虚拟化的应用场景GPU虚拟化技术广泛应用于以下领域: 云计算:在云计算环境中,通过GPU虚拟化技术,可以为用户提供灵活、高效的计算资源,支持复杂的AI训练和推理任务。 深度学习:在深度学习模型训练和推理中,GPU虚拟化技术可以提高计算效率,缩短训练时间,支持大规模数据处理和复杂模型的训练。 数据分析:在大数据分析领域,通过GPU虚拟化技术,可以加速数据处理和分析,提高数据处理的效率和精度。 图形渲染:在图形渲染和虚拟现实等应用中,GPU虚拟化技术可以提供高性能的图形处理能力,支持复杂的图形渲染和实时交互。三GPU虚拟化关键技术虚拟化技术实现体现三个层次,即用户层、内核层和硬件层。然后在根据技术的应用场景分为隔离场景(容器和虚机)和硬件场景(虚拟桌面、渲染和AI计算)两个维度,不同的技术可能仅适用它对应的场景。图2:GPU虚拟化技术实现在不同软硬件层技术实现可分类为: 用户层:API拦截和API forwarding。 内核层:GPU驱动拦截;GPU驱动半虚拟化:Para Virtualization。 硬件层:硬件虚拟化:Virtualization;SRIOV:Single Root I/O Virtualization;Nvidia MIG:Multi-Instance GPU。(一)GPU用户层虚拟化技术用户层虚拟化技术包含本地API拦截和API forwarding、远程API forwarding、半虚拟化API forwarding三种。技术1:本地API拦截和API forwarding图3:本地API拦截和API forwarding通过在用户态创建一个中间库,拦截应用程序对底层GPU库的调用,并在中间库中处理和转发这些调用,从而实现对GPU资源的虚拟化管理。调用步骤:1.应用调用libwrapper:应用程序(APP)调用libwrapper中的函数。2.拦截和解析:libwrapper拦截应用的函数调用,解析参数。3.调用底层库:使用解析后的参数,通过dlopen动态打开底层库,调用相同名称的函数。4.返回结果:调用完成后,libwrapper将结果返回给应用程序。关键点: 静态链接变动态链接:应用程序和底层库的静态链接需要变为动态链接。 动态库加载:libwrapper需要使用dlopen动态加载底层库。我们可以通过GPU用户层的API拦截与转发技术实现在用户态对底层库的API调用进行控制和管理。技术2:远程API forwarding图4:远程API forwarding远程API转发技术允许GPU资源在不同的物理机器之间共享。通过将GPU调用转发到远程机器上的底层库,系统可以实现GPU资源池化,从而使不具备GPU的机器也能够利用GPU进行计算。技术说明:1.网络调用底层库:libwrapper通过网络调用位于不同机器上的底层库。2.库分为两部分:客户端(client):负责转发请求;服务器端(server):负责接收请求并调用底层库。3.GPU池化: 可以将多个GPU组成调用池,允许多个客户端调用这些GPU,从而实现让不具备GPU的机器也能使用GPU的功能。关键点: 类似RPC的函数调用:调用函数需要进行参数的序列化和反序列化。 性能优化:对于本机来说,远程数据传输的性能对函数调用的延迟影响很大。通常可以通过RDMA(远程直接内存访问)进行网络加速。该技术可以实现远程GPU的API转发,优化GPU资源的利用,增强系统的计算能力。技术3:半虚拟化API forwarding图5:virgl+virtio-gpu实现半虚拟化API转发技术通过虚拟化和半虚拟化的方式,实现虚拟机中的应用程序对宿主机GPU资源的调用,从而在虚拟化环境中高效地利用GPU资源。实现方案:1.虚拟机中的运行环境:应用程序(APP)和libwrapper在虚拟机中运行。2.半虚拟化通讯:libwrapper通过半虚拟化方式(virtio)进行通讯,调用宿主机的底层库。3.virtio实现: 虚拟机内核实现virtio frontend。 宿主机的hypervisor实现virtio backend。4.底层库调用:宿主机负责完成底层库的调用。关键点: 共享内存:virtio通过共享内存的方式在虚拟机和宿主机之间共享数据,减少了数据拷贝。通过半虚拟化API转发技术,可以实现虚拟机环境下的GPU半虚拟化API转发,有效利用宿主机的GPU资源。(二)GPU内核层虚拟化内核层虚拟化技术包含内核层GPU驱动拦截和内核层GPU驱动半虚拟化两种。技术1:内核层GPU驱动拦截图6:内核层GPU驱动拦截内核层GPU驱动拦截技术通过在内核中创建一个模块来拦截对GPU驱动的访问,从而实现对GPU资源的虚拟化管理。此方法适用于容器化应用。实现原理:1.设备文件拦截:底层库通常通过设备文件(如/dev/realgpu)访问GPU驱动的功能。2.内核模块创建模拟设备文件:实现一个内核模块,输出模拟的设备文件/dev/fakegpu给用户空间。3.伪装设备文件:将模拟的设备文件通过bind mount的方式挂载到容器中,伪装成真正的设备文件/dev/realgpu。4. 容器内运行环境:应用程序(APP)和底层库都在容器内运行。底层库访问伪装的设备文件/dev/realgpu,此时所有访问都被内核模块拦截。实现关键: 理解系统调用:需要了解底层库调用GPU驱动的系统调用的具体含义。 拦截必要调用:内核拦截模块只需要拦截必要的系统调用。这项技术使得GPU资源可以在容器化环境中被有效地虚拟化和管理。技术2:内核层GPU驱动半虚拟化用户进程通过系统虚拟化层(hypervisor)提供的虚拟化接口,访问(真实的)虚拟化接口。图7:GPU驱动半虚拟化内核层GPU驱动半虚拟化技术通过在虚拟机环境中实现对GPU资源的虚拟化管理,适用于虚拟机应用。实现原理:1.虚拟机内的运行环境:应用程序(APP)和底层库都在虚拟机中运行。2.半虚拟化接口:虚拟机的GPU驱动实现半虚拟化接口,通过类似hypercall的方式调用宿主机实际的GPU驱动。3.hypercall机制:hypercall切换虚拟机(guest)到虚拟机管理程序(hypervisor),由hypervisor通过内核中的驱动代理来访问实际的GPU驱动。实现关键: 适用范围:适用于虚拟机应用。通过该技术,可以在虚拟机环境中高效地虚拟化和管理GPU资源。(三)GPU硬件层虚拟化硬件层虚拟化需要软件和硬件结合才能实现,其中需要硬件的支持的部分包括: 支持CPU和内存的硬件虚拟化。相关技术包括:Intel VT-X、AMD AMD-V、ARM 8.3 VHE、RISC-V Hypervisor Extension等。 支持IOMMU。DMA remapping和Interrupt remapping;硬件隔离和页表机制;相关技术包括:IntelVT-D,AMD IOMMU,ARM SMMU等。下面主要介绍全虚拟化/透传GPU技术及NVIDIA显卡相关的4项GPU虚拟化技术。技术1:全虚拟化/透传GPU图8:透传GPU全虚拟化,也称为透传GPU,是一种将GPU直接分配给虚拟机的方法,使虚拟机能够以最小的性能损耗访问真实的硬件资源。实现原理:1.虚拟机GPU驱动:虚机的GPU驱动无需做任何修改,能够直接访问真实的硬件资源。2. GPU透传:整个GPU透传给虚拟机,确保性能损耗最小。实现关键: 适用范围:适用于虚拟机应用和云GPU服务器。 资源共享限制:由于无法实现GPU资源共享,一般认为这不属于严格意义上的GPU虚拟化。这项技术在需要高性能GPU访问的虚拟化环境中非常有效。技术2:NVIDIAvGPU图9:NVIDIA vGPU方案NVIDIA vGPU是NVIDIA特有的虚拟化技术,旨在支持虚拟机环境中的GPU资源分配和管理。实现原理:1. 特定驱动安装:虚拟机内核需要安装特定的GPU虚拟化驱动,即GRID驱动,与物理机安装的驱动不同。2. 显存分配:显存按照固定切分,直接分配给虚拟机。3. 算力调度:采用时分方案,按时间片将GPU算力分配给虚拟机。实现关键: 适用范围:适合云GPU服务器。 收费模式:该软件需要付费使用。NVIDIA vGPU提供了一种高效的方式来管理虚拟机中的GPU资源,适用于需要高性能图形和计算能力的场景。技术3:NVIDIA MIGNVIDIA多实例GPU(Multi-Instance GPU,简称MIG)是NVIDIA在H100,A100,A30系列GPU卡上推出的一项新特性, 旨在将一块物理GPU分割为多个GPU实例,以提供更细粒度的资源共享和隔离。MIG最多可将一块GPU划分成七个GPU实例, 使得一个 物理GPU卡可为多个用户提供单独的GPU资源,以实现最佳GPU利用率。这个功能使得多个应用程序或用户可以同时共享GPU资源,提高了计算资源的利用率,并增加了系统的可扩展性。通过MIG,每个GPU实例的处理器在整个内存系统中具有独立且隔离的路径——芯片上的交叉开关端口、L2高速缓存组、内存控制器和DRAM地址总线都唯一分配给单个实例。图10:NVIDIA硬件切分方案NVIDIA MIG方案适合容器化部署,云原生场景。技术4:NVIDIAMIGvGPU图11:NVIDIA MIG vGPUNVIDIA MIG vGPU是将多实例GPU(MIG)和虚拟GPU(vGPU)相结合的一种技术,旨在优化虚拟机中的GPU资源分配。实现原理:1.资源切分:显存和算力按照MIG硬件的切分方式,直接分配给虚拟机。2.性能优势:相较于传统的vGPU,MIG vGPU在算力损耗方面更小。实现关键: 适用范围:适合虚拟机应用和云GPU服务器。通过MIG vGPU,用户可以更高效地利用GPU资源,提升虚拟化环境中的性能表现。(四)GPU虚拟化技术对比在用户层、内核层、硬件层的GPU虚拟化技术对比如下:表1:GPU虚拟化技术对比(五)业界GPU虚拟化方案对比当前业界主要的GPU虚拟化方案对比如下:表2:业界GPU虚拟化方案对比四GPU虚拟化技术初探本章节主要探索容器环境下GPU资源管理的技术,首先介绍Kubernetes管理GPU资源的插件机制,然后尝试在Kubernetes环境下对NVIDIA GPU资源整卡模式及vGPU模式使用进行探索。(一)GPU虚拟化在容器中的实现由于近几年AI技术愈发成熟,落地场景越来越多,对GPU的需求呈井喷趋势。而在资源管理调度平台上,Kubernetes已成为事实上的标准。所以很多客户选择在Kubernetes中使用GPU运行AI计算任务。Kubernetes本身是通过插件扩展的机制来管理GPU资源的。通过DevicePlugin实现GPU资源的管理和分配。DevicePlugin通过gRPC与kubelet通信,汇报节点上的GPU资源,并在容器创建时进行资源分配。 DevicePlugin机制:Kubernetes通过DevicePlugin机制,实现对GPU等硬件资源的管理。DevicePlugin通过gRPC与kubelet通信,汇报节点上的GPU资源,并在容器创建时进行资源分配。 资源汇报:DevicePlugin定期向kubelet汇报节点上的GPU资源,如设备列表和可用数量。kubelet在接收到资源汇报后,将资源信息更新到APIServer中,供调度器使用。 资源分配:在容器创建时,kubelet根据调度器的调度决策,向DevicePlugin发起资源分配请求,分配GPU资源并将资源信息传递给容器。下图展示的是Device Plugin与Kubelet交互过程:图12:Device Plugin与Kubelet交互过程对于每一种硬件设备,都需要有它所对应的Device Plugin进行管理,这些Device Plugin,都通过gRPC的方式同kubelet连接起来。以NVIDIA GPU为例,它对应的插件叫作NVIDIA GPU device plugin。DevicePlugin注册一个socket文件到/var/lib/kubelet/device-plugins/目录下,Kubelet通过这个目录下的socket文件向对应的DevicePlugin发送gRPC请求。Device Plugin会通过一个叫作ListAndWatch的API,定期向kubelet汇报该Node上GPU的列表。比如,一共有三个GPU(GPU0、GPU1和GPU2)。这样,kubelet在拿到这个列表之后,就可以直接在它向APIServer发送的心跳里,以Extended Resource的方式,加上这些GPU的数量,比如nvidia.com/gpu=3。当kubelet发现这个Pod的容器请求一个GPU的时候,kubelet就会从自己持有的GPU列表里,为这个容器分配一个GPU。此时,kubelet就会向本机的Device Plugin发起一个Allocate()请求。这个请求携带的参数,正是即将分配给该容器的设备ID列表。当Device Plugin收到Allocate请求之后,它就会根据kubelet传递过来的设备ID,从Device Plugin里找到这些设备对应的设备路径和驱动目录。比如,在NVIDIA Device Plugin的实现里,它会定期访问nvidia-docker插件,从而获取到本机的GPU信息。而被分配GPU对应的设备路径和驱动目录信息被返回给kubelet之后,kubelet就完成了为一个容器分配GPU的操作。接下来,kubelet会把这些信息追加在创建该容器所对应的CRI请求当中。这样,当这个CRI请求发给Docker之后,Docker为你创建出来的容器里,就会出现这个GPU设备,并把它所需要的驱动目录挂载进去。(二)Kubernetes上对NVIDIAGPU资源管理探索同普通计算机硬件一样,NVIDIA GPU卡作为物理硬件,必须安装NVIDIA GPU驱动后才能使用。为了降低用户在kubernetes上使用GPU的成本,NVIDIA官方提供了NVIDIA GPU Operator组件来管理使用NVIDIA GPU所依赖的各种组件。这些组件包括NVIDIA驱动程序(用于启用CUDA)、NVIDIA容器运行时、GPU节点标记、基于DCGM的监控等。 理论上来说用户只需要将GPU卡插在已经被kubernetes所纳管的计算设备上,然后通过GPU Operator就能使用NVIDIA GPU的所有能力了。NVIDIA在GPU的使用方式上提供了如下3种解决方案: 整卡(Full GPU)整卡是指将整个NVIDIA GPU分配给单个用户或应用程序。在这种配置下,应用可以完全占用GPU的所有资源, 并获得最大的计算性能。整卡适用于需要大量计算资源和内存的工作负载,如深度学习训练、科学计算等。 vGPU(Virtual GPU)vGPU是一种虚拟化技术,允许将一个物理GPU划分为多个虚拟GPU,每个虚拟GPU分配给不同的虚拟机或用户。vGPU使多个用户可以共享同一台物理GPU,并在各自的虚拟环境中独立使用GPU资源。 每个虚拟GPU可以获得一定的计算能力和显存容量。vGPU适用于虚拟化环境和云计算场景,可以提供更高的资源利用率和灵活性。 MIG(Multi-Instance GPU)MIG是NVIDIA Ampere架构引入的一项功能,它允许将一个物理GPU划分为多个物理GPU实例,每个实例可以独立分配给不同的用户或工作负载。 每个MIG实例具有自己的计算资源、显存和PCIe带宽,就像一个独立的虚拟GPU。MIG提供了更细粒度的GPU资源分配和管理,可以根据需求动态调整实例的数量和大小。MIG适用于多租户环境、容器化应用程序和批处理作业等场景。在测试K8S中管理NVIDIA GPU需要先安装配置NVIDIA GPU Operator。在测试环境CentOS 7.9,安装内核为3.10.0-1160的GPU Operator包。安装时指定插件安装的命名空间等,并配置Operator参数配置、Driver参数配置。当前仅尝试使用整卡模式和vGPU模式。1.NVIDIA GPU整卡模式前置条件:当前集群已安装GPU Operator并已启用NVIDIA DevicePlugin。当前集群内GPU卡未进行任何虚拟化操作或被其它应用占用。创建工作负载申请GPU资源,在资源申请和限制配置中增加nvidia.com/gpu: 1参数配置应用使用物理卡的数量,输入值必须为整数且小于等于宿主机上的卡数量。Demo使用YAML配置:2.NVIDIA vGPU模式(1)安装vGPU插件参数配置说明: deviceCoreScaling:NVIDIA装置算力使用比例,预设值是1。可以大于1(启用虚拟算力,实验功能)。如果我们配置devicePlugin.deviceCoreScaling参数为S,在部署了我们装置插件的Kubernetes集群中,这张GPU分出的vGPU将总共包含S * 100%算力。 deviceMemoryScaling:NVIDIA装置显存使用比例,预设值是1。可以大于1(启用虚拟显存,实验功能)。 对于有M显存大小的NVIDIA GPU,如果我们配置devicePlugin.deviceMemoryScaling参数为S, 在部署了我们装置插件的Kubernetes集群中,这张GPU分出的vGPU将总共包含S * M显存。 deviceSplitCount:整数类型,预设值是10。GPU的分割数,每一张GPU都不能分配超过其配置数目的任务。 若其配置为N的话,每个GPU上最多可以同时存在N个任务。 Resources:就是对应vgpu-device-plugin和vgpu-schedule pod的资源使用量。 ServiceMonitor:默认不开启,开启后可前往可观测性模块查看vGPU相关监控。如需开启,请确保insight-agent已安装并处于运行状态,否则将导致NVIDIA vGPU Addon安装失败。(2)安装成功之后会在指定Namespace下出现如下两个类型的Pod,即表示NVIDIA vGPU插件已安装成功:(3)测试vGPU前置条件: 集群节点上具有对应型号的GPU卡 已成功安装vGPU Addon。 已安装GPU Operator,并已关闭Nvidia.DevicePlugin能力。工作负载配置以下相关参数: 物理卡数量(nvidia.com/vgpu):表示当前Pod需要挂载几张物理卡,输入值必须为整数且小于等于宿主机上的卡数量。 GPU算力(nvidia.com/gpucores):表示每张卡占用的GPU算力,值范围为0-100; 如果配置为0, 则认为不强制隔离;配置为100,则认为独占整张卡。 GPU显存(nvidia.com/gpumem):表示每张卡占用的GPU显存,值单位为MB,最小值为1,最大值为整卡的显存值。Demo使用YAML配置:五挑战与展望本文介绍了GPU虚拟化技术基本概念及相关技术,尝试了在容器环境下对NVIDIA GPU资源管理的探索。GPU虚拟化技术在亚信科技智能计算引擎产品(AISWare ACE)中也得到了应用,提供GPU资源管理模块,支持NVIDIA CUDA多版本管理,为模型训练提供整卡、vGPU等能力。但当前也存在一些技术挑战。(一)当前面临的技术挑战GPU虚拟化在实际应用中仍然面临一些技术挑战,如不同厂商GPU设备之间的兼容性问题、资源分配和调度的复杂性、资源隔离的安全性等。这些问题需要进一步的研究和解决。 兼容性问题:不同厂商的GPU设备在驱动程序、API接口和硬件架构上存在差异,如何实现对多种GPU设备的统一管理和调度,是一个亟待解决的问题。 资源分配和调度:在多租户环境中,如何实现资源的按需分配和动态调度,同时保证资源利用率和系统性能,是一个重要的技术挑战。 资源隔离和安全性:在多租户环境中,确保不同应用之间的资源隔离和安全性,防止资源争用和数据泄露,是一个关键问题。(二)未来的发展方向与研究热点未来,GPU虚拟化技术将进一步向着更高效、更灵活、更安全的方向发展。特别是在异构计算资源的统一管理、多租户环境下的资源隔离与共享、以及GPU池化等方面,将成为研究的热点和发展方向。 异构计算资源的统一管理:通过开发兼容多种计算设备的统一管理平台,实现对CPU、GPU、FPGA等异构计算资源的统一管理和调度,提高资源利用率和管理效率。 多租户环境下的资源隔离与共享:通过改进虚拟化技术,实现更高效的资源隔离和共享,确保不同租户之间的资源安全和性能稳定。 GPU池化技术的发展:通过GPU池化技术,实现对多个物理GPU资源的统一管理和调度,提供更高的资源利用率和调度灵活性。通过对GPU虚拟化技术的研究和探索,可以为企业提供更加高效、灵活和安全的计算资源,支持其在AI、大数据等新兴领域的快速发展。为企业的数字化转型和业务创新提供有力支持。参考资料[1]https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/[2]https://github.com/NVIDIA/k8s-device-plugin[3] GPU虚拟化白皮书– Imagination
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-31 04:16 , Processed in 0.967207 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表