标签: metal-performance-shaders

CoreML / MLModelConfig PreferredMetalDevice - 了解设备放置启发法

是否有任何公开文档明确说明了CoreML's在 macOS 上运行推理模型时 GPU 设备放置的策略?它如何决定是否应在集成、离散或 CPU 上运行?可以可靠地“强制”一条路径吗?对于像配备多个独立 GPU 和多个 eGPU 的新款 Mac Pro 这样的系统来说,这种情况有何变化?

我对 rMBP 的测试表明答案是否定的 - 温度、电池、插入电源、自动图形设置和应用程序支持,甚至可能还有一些 MLModel 架构启发式方法都在设备放置中发挥着作用。

结合上下文更长:

我很好奇是否有任何关于 CoreML 的设备选择启发式的公开文档。通过添加 10.15 的 CoreML preferredMetalDeviceAPI MLModelConfig,我想可以强制MTLDevice/ MLModelVision 请求运行。

在我使用 Vega 20 的 2018 rMBP 上对集成、分立和 eGPU 进行的测试中,似乎只有 eGPU 在请求时始终运行 CoreML 模型。

我的 CoreML 模型是一个管道模型,由具有多个输出的 MobileNet 分类器(附加到自定义特征提取器的多头分类器)组成。

我很想了解设备选择偏好,原因如下:

a) 我想确保我的MLModel输入图像CIImagesMTLTextures本地设备推理支持,以限制 PCI 传输并继续在单个 GPU 设备上进行处理

b) 我的模型实际上是输入视频帧,WWDC '19 / 10.15 引入了 VideoToolbox 和 …

macos ios metal metal-performance-shaders coreml

18
推荐指数
1
解决办法
2226
查看次数

出货后不断训练CoreML模型

在查看新的CoreML API时,我看不到在生成.mlmodel并将其捆绑到您的应用程序后继续训练模型的任何方法.这让我觉得我无法对用户的内容或动作进行机器学习,因为模型必须事先经过完全训练.

发货后有没有办法将训练数据添加到我训练过的模型中?

编辑:我刚刚注意到你可以从URL初始化生成的模型类,所以也许我可以将新的训练数据发布到我的服务器,重新生成训练模型并将其下载到应用程序中?似乎它会起作用,但这完全打败了在没有用户数据离开设备的情况下能够使用ML的隐私方面.

metal-performance-shaders ios11 coreml

14
推荐指数
2
解决办法
2543
查看次数

使用OpenGL ES 2.0 for iOS的线性代数库

有没有人知道iOS下使用OpenGL ES 2.0的线性代数库?

具体来说,我正在寻找一种方法,使用iOS设备上的GPU对任意大小的矩阵(例如,远大于4x4,更像是5,000 x 100,000)进行矩阵乘法.

gpgpu opengl-es ios opengl-es-2.0 metal-performance-shaders

10
推荐指数
1
解决办法
878
查看次数

MTKView绘图性能

我正在尝试做什么

我正在尝试通过使用“金属”视图在相机Feed上显示滤镜:MTKView。我密切关注Apple的示例代码的方法- 通过利用TrueDepth摄像机数据链接)来增强实时视频

我到目前为止所拥有的

以下代码效果很好(主要从上述示例代码解释):

    class MetalObject: NSObject, MTKViewDelegate {

            private var metalBufferView         : MTKView?
            private var metalDevice             = MTLCreateSystemDefaultDevice()
            private var metalCommandQueue       : MTLCommandQueue!

            private var ciContext               : CIContext!
            private let colorSpace              = CGColorSpaceCreateDeviceRGB()

            private var videoPixelBuffer        : CVPixelBuffer?

            private let syncQueue               = DispatchQueue(label: "Preview View Sync Queue", qos: .userInitiated, attributes: [], autoreleaseFrequency: .workItem)

            private var textureWidth            : Int             = 0
            private var textureHeight           : Int             = 0
            private var textureMirroring        = …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift metal metal-performance-shaders

9
推荐指数
1
解决办法
974
查看次数

有没有办法在docker容器上使用金属性能着色器?

我目前正在使用 mac book m2 pro 并安装了 Docker 桌面来在 Linux 上创建开发容器。我知道启动容器时可以选择将 GPU 添加到容器--gpus中。docker run但是有没有办法在docker容器上使用mac book上的MPS呢?我认为这可能永远行不通......这个问题可能听起来很愚蠢,但我找不到任何指出这一点的文章。谢谢

  • 谷歌搜索
  • 搜索了官方 docker 页面

docker metal-performance-shaders

6
推荐指数
0
解决办法
455
查看次数

如何将Metal Performance Shader与MTLBlitCommandEncoder同步?

我正在尝试更好地了解与Metal Performance Shaders和一起使用时的同步要求MTLBlitCommandEncoder

我有一个MTLCommandBuffer设置如下:

  • 使用MTLBlitCommandEncoder到纹理A的区域复制到纹理B. 纹理A比纹理B.大我提取纹理特征的一个“瓦”,并复制成质地B.

  • 使用MPSImageBilinearScale金属性能着色器,将纹理B作为源纹理,将第三纹理纹理C作为目标。此金属性能着色器将缩放并可能将纹理B的内容转换为纹理C。

在金属性能着色器开始尝试缩放纹理B之前,如何确保blit编码器完全完成了从纹理A到纹理B的数据复制?我什至不必担心这个问题,还是命令缓冲区的串行特性已经为我解决了这个问题?

Metal具有MTLFence用于同步访问资源的围栅的概念,但是我仍然看不到要在围栅上等待Metal Performance Shader。(而waitForFence:编码器上有。)

如果我不能使用篱笆并且需要同步,建议的做法是仅使blit编码器入队,然后waitUntilCompleted在使着色器入队并再次调用之前调用命令缓冲区waitUntilCompleted吗?例如:

id<MTLCommandBuffer> commandBuffer;

// Enqueue blit encoder to copy Texture A -> Texture B
id<MTLBlitCommandEncoder> blitEncoder = [commandBuffer blitCommandEncoder];
[blitEncoder copyFromTexture:...];
[blitEncoder endEncoding];

// Wait for blit encoder to complete.
[commandBuffer commit];
[commandBuffer waitUntilCompleted];

// Scale Texture B -> Texture C
MPSImageBilinearScale *imageScaleShader = [[MPSImageBilinearScale alloc] initWithDevice:...];  
[imageScaleShader encodeToCommandBuffer:commandBuffer...];

// Wait …
Run Code Online (Sandbox Code Playgroud)

macos objective-c metal metalkit metal-performance-shaders

5
推荐指数
1
解决办法
735
查看次数

Apple Metal 逐元素矩阵乘法(Hadamard 产品)

是否可以使用 Apple 的 Metal Performance Shaders 来执行 Hadamard 产品?我看到可以使用this执行普通矩阵乘法,但我专门寻找元素乘法,或者一种巧妙的构造方法。(例如,是否可以将 MPSMatrix 转换为 MPSVector,然后使用向量执行乘积?)

更新:我很欣赏使用着色器的建议!我正在致力于实施,这看起来很有希望!一旦我有工作,我会发布解决方案。

objective-c swift metal metal-performance-shaders

5
推荐指数
1
解决办法
1060
查看次数

使用金属性能着色器进行反卷积

原来没有这样的操作deconvolutionMPS.最接近的类比tensorflowconv2d_transpose.

是否可以在MPS默认操作之间进行插件自定义操作?

metal tensorflow metal-performance-shaders

4
推荐指数
1
解决办法
938
查看次数

如何将MTLTexture转换为CVpixelBuffer以写入AVAssetWriter?

我要求在实时视频上应用过滤器,我正在尝试在Metal中进行过滤.

但是在将过滤器编码为目标过滤器之后,我遇到了将MTLTexture转换为CVPixelBuffer的问题.参考(https://github.com/oklyc/MetalCameraSample-master-2)

这是我的代码.

if let pixelBuffer = pixelBuffer {
                CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.init(rawValue: 0))             
                let region = MTLRegionMake2D(0, 0, Int(currentDrawable.layer.drawableSize.width), Int(currentDrawable.layer.drawableSize.height))                    
                let bytesPerPixel = 4;
                let bytesPerRow = CGFloat(bytesPerPixel) * currentDrawable.layer.drawableSize.width

                let tempBuffer = CVPixelBufferGetBaseAddress(pixelBuffer)
                destinationTexture.getBytes(tempBuffer!, bytesPerRow: Int(bytesPerRow), from: region1, mipmapLevel: 0)

                let image = self.imageFromCVPixelBuffer(buffer: pixelBuffer)
                CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.init(rawValue: 0))

            }
Run Code Online (Sandbox Code Playgroud)

imageFromCVPixelBuffer方法看起来像这样.

func imageFromCVPixelBuffer(buffer: CVPixelBuffer) -> UIImage {

    let ciimage = CIImage(cvPixelBuffer: buffer)
    let context = CIContext(options: nil)
    let cgimgage = context.createCGImage(ciimage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(buffer), height: …
Run Code Online (Sandbox Code Playgroud)

ios swift metal metalkit metal-performance-shaders

3
推荐指数
1
解决办法
2756
查看次数

适当使用 MPSImageGaussianPyramid with Metal

我想使用MPSImageGaussianPyramid但对 Metal 的用法和 mipmap 非常陌生。我想使用过滤器为图像处理技术生成图像金字塔。

根据我能够收集的内容,MPSImageGaussianPyramid创建了一个 mipmapped 图像,但是在我的代码中,我什至很难确保我正确地看到了输出。是否有正确使用此过滤器的示例?我的问题是:

  1. 应用过滤器后如何访问 mipmap 图像?

  2. 是否可以将 mipmapped 图像复制到另一个图像进行处理?

  3. 这个 mipmapped 图像会比通过自定义过滤器手动创建金字塔更快吗?

谢谢,稍后我将提供一些我无法开始工作的示例代码。

ios swift metal metal-performance-shaders

2
推荐指数
1
解决办法
379
查看次数