首页 > 其他分享 >lazarus调用Onnxruntime

lazarus调用Onnxruntime

时间:2024-06-23 10:53:24浏览次数:3  
标签:调用 Onnxruntime 推理 lazarus 出错 DefaultSessionOptions CUDA

一、下载Onnxruntime

GitHub - microsoft/onnxruntime: ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

注意win7运行时会出错。

可以下载  https://pan.baidu.com/s/18gIMP7r3lZAmgUTj4H2ugA?pwd=6666  编译好的可在win7下使用。还可以使用CUDA加速。加速方法后面说

二、下载ONNXRuntime AI and Machine Learning Library for Freepascal 

GitHub - hshatti/TONNXRuntime: TOnnxRuntime is a Microsoft ONNXRuntime AI and Machine Learning Library for Freepascal / Delphi

里面有例子。

三、注意事项

1、调用时在单元中要加{$mode delphi}{$H+},因为有些定义使用的是delphi的格式。

2、调用方法时有时会出错。要查看方法的实现,直接写就可以。如

DefaultSessionOptions.SetGraphOptimizationLevel(ORT_ENABLE_BASIC); 这个会出错

查看SetGraphOptimizationLevel方法,写成下面就不会出错了。

ThrowOnError(GetApi().SetSessionGraphOptimizationLevel(DefaultSessionOptions.p_,ORT_ENABLE_ALL));

3、设置CPU线程数后,退出时要关闭,否则会出错

DefaultSessionOptions.SetIntraOpNumThreads(UserCpu); //使用线程数,默认为全开

退出时要调用

session.release;
DefaultSessionOptions.release;

四、CUDA加速

1、在session := TORTSession.Create(ModFile); 创建对象前设置CUDA

OrtSessionOptionsAppendExecutionProvider_CUDA(DefaultSessionOptions.p_,0);

2、复制OnnxruntimeCUDA加速dll

onnxruntime_providers_shared.dll
onnxruntime_providers_cuda.dll

3、复制CUDA动态库

根据运行时提示在Program Files\Nvidia\CUDADevlopment\bin找到相关文件。

4、运行时第一次推理时比较慢,是正常的。

5、在IDE中推理比较慢,原因不明。但直接运行时比CPU推理快得多。

五、如何还要提速,可使用Opencl计算

比如Tbitmap转blob等计算时可以用Opencl进行计算,可以提高整个推理速度。

 

用这个比用Opencv好,对Onnx支持更全。最新的yolov10也可以用的。

标签:调用,Onnxruntime,推理,lazarus,出错,DefaultSessionOptions,CUDA
From: https://www.cnblogs.com/jwjss/p/18263154

相关文章

  • kettle从入门到精通 第七十三课 ETL之kettle kettle调用http分页接口教程
    场景:kettle调用http接口获取数据(由于数据量比较大,鉴于网络和性能考虑,所以接口是个分页接口)。 方案:构造页码list,然后循环调用接口。1、总体设计1)、初始化分页参数pageNum=1,pageSize=20,这里的pageSize可以根据自己的需求自行调整,比如每次从接口取数100或者1000等等。2)、第一......
  • HTML5调用系统摄像头结合canvas进行拍照以及文件上传,调用结束后关闭浏览器对摄像头的
    html5部分<!--摄像头拍照--><el-buttonsize="mini"type="primary"class="cameraBtn"@click="confirm_camera">拍照</el-button><el-dialog:visible.sync="isShowCamera"title="拍照"......
  • golang runtime.Caller 获取调用堆栈信息, Caller(1) 和 Caller(2) 的区别
     funcwhoCalledMe(){//获取调用堆栈信息_,fileName,lineNo,ok:=runtime.Caller(2)if!ok{fmt.Println("Failedtogetcallerinformation")return}fmt.Printf("Calledfrom:%s:%d\n",fileName,lineNo......
  • RAG与LLM原理及实践(2)--- RAG结合LLM function调用的原理及落地实践
    花一点时间继续写下,RAG结合LLM。通过上一篇文章你应该知道为什么RAG要结合LLM,或者说为什么LLM要结合RAG使得LLM更强大,特别是当LLM应用在人机对话等方面的时候。只要涉及一问一答,并通过上下文继续丰富对话,就会涉及到他。这个是看事情的两个维度。就像是买钟送电池还是买电池送......
  • C++系统相关操作1 - 调用命令行并获取返回值
    1.关键词2.sysutil.h3.sysutil.cpp3.1.system_util_unix.cpp3.2.system_util_win.cpp4.测试代码5.运行结果6.源码地址1.关键词关键词:C++系统调用systempopen跨平台应用场景:希望直接调用操作系统的某些命令,并获取命令的返回值。2.sysutil.h#pragm......
  • quasar项目中用js调用串口
    参考链接:NodeSerialPort  (网站中https://serialport.io/docs/guide-electron提到了ElectronSerialportExample,这个项目中涉及到serialport的代码在renderer.js中)WebSerialAPI,web端通过串口与硬件通信电脑上已有的端口:(选择“在新标签页中打开图片”查看原图)看到网页......
  • uniapp中父组件调用子组件的方法
    1父组件<template>   <view>      <!--子组件-->      <recommen ref='xText'></recommen>    <view@click='onClick'>点击调用子组件方法</view>   </view></template><script>......
  • 一个简单的python脚本,把latex项目的调用资源放在同一级,以便arxiv
    据说上传arxiv时所有资源需要在同一目录,也就是不能有文件夹(只是据说,有人说有文件夹也行,我没试过),所以写了一个简单的小脚本把latex项目的资源(主要是图片)放在和.tex一个路径下:importosimportshutiltex_file='main.tex'img_folder='imgs'encoding_type='utf-8'withopen......
  • 使用Microsoft.SemanticKernel基于本地运行的Ollama大语言模型实现Agent调用函数
    大语言模型的发展日新月异,记得在去年这个时候,函数调用还是gpt-4的专属。到今年本地运行的大模型无论是推理能力还是文本的输出质量都已经非常接近gpt-4了。而在去年gpt-4尚未发布函数调用时,智能体框架的开发者们依赖构建精巧的提示词实现了gpt-3.5的函数调用。目前在本机运行的大......
  • 使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
    你好,这里是codetrend专栏“SpringCloud2023实战”。本文简单介绍SpringCloud2023中使用Sentinel进行限流管理。前言随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控......