通过数据库进行机器学习
引言
背景
近年来,随着人工智能领域的不断发展,深度学习作为机器学习的一个重要分支,近年来得到了广泛的关注和应用,在许多领域都取得了卓越的成果,例如计算机视觉、自然语言处理、语音识别等等。
数据库是组织和存储数据的核心技术,为各种应用提供了支持,包括商业、工业、科学等各个领域。数据也是机器学习算法的重要基础,因为它提供了训练和测试所需的结构化和非结构化数据。
传统的AI流程和数据库是分离的,导致整个开发流程需要多个步骤,中间涉及到众多的技术栈,过程并不友好。因此产生了一种思路,将机器学习和数据库的结合,随着机器学习和数据库技术的不断发展,越来越多的人开始探索机器学习如何与数据库相结合,从而获得更加灵活和高效的数据处理和分析工具。
传统机器学习的方法
机器学习的主要流程和步骤如下:
- 数据收集和准备:收集并清理数据集,保证数据的一致性和准确性。
- 特征选择和提取:选出最能反映数据特征的变量,并提取相应的特征。
- 模型选择和训练:根据不同的算法需求选择不同的模型,并利用训练数据对模型进行训练和优化。
- 模型评估和选择:通过交叉验证等方法评估模型的性能和效果,并选择最佳的模型。
- 参数调节和优化:对模型进行调参和优化,以提升模型的性能和泛化能力。
- 模型部署和应用:将模型部署到实际应用环境中,以实现自动化决策和预测。
- 持续监控和改进:对模型进行持续监控和改进,以适应实际环境中的变化和新情况。
需要特别注意的是,深度学习需要大量的数据和计算资源,因此在进行深度学习时需要特别注意数据量和计算资源的问题。同时,深度学习算法的调参和优化也需要更高的技术要求和经验积累。
从以上流程可以看出,机器学习的几个关键要素:框架、模型、数据、基础设施(算力平台、数据库、ETL工具),以下这些对要素的描述都是chatGPT提供的(有微调)
框架
目前流行的机器学习框架很多,下面是一些主要的机器学习框架(这些框架各有其特点和应用场景,选择适合自己的框架可以提高机器学习效率和精度):
- TensorFlow:由Google发布,支持深度学习、机器学习、科学计算等多种应用场景。
- Keras:基于Python的高级神经网络API,可以在TensorFlow、Theano、CNTK等后端引擎上运行。
- PyTorch:由Facebook发布,易于使用的深度学习框架,具有动态计算图和强大的GPU加速能力。
- PaddlePaddle: 由百度公司开发并维护,支持深度学习、机器学习、自然语言处理等多种应用场景
- Scikit-learn:Python中最流行的机器学习库之一,提供了大量的机器学习算法和工具。
- Caffe:由加州大学伯克利分校开发,用于卷积神经网络的深度学习框架。
- MXNet:由亚马逊发布,支持分布式机器学习和深度学习应用。
- Theano:以高效的数值计算为核心的Python库,支持GPU加速并用于深度学习和科学计算。
- Torch:由纽约大学机器学习小组开发的框架,支持科学计算和机器学习。
低代码可视化工具
基于框架编写代码虽然简化了步骤,但依旧有很大的简化空间,因此云服务商开始提供可视化的机器学习和深度学习流程,下面是一些主要的云服务商及其提供的机器学习能力:
- AWS:Amazon Web Services提供的SageMaker Studio可以在可视化界面中创建、训练和调整模型,并提供全面的数据科学工具、Notebook和数据集。
- Microsoft Azure:Azure Machine Learning Studio支持无需编程的可视化设计和部署机器学习模型的功能,包括自动调参、模型管理和模型解释服务等。
- Google Cloud:Google Cloud AI Platform提供了可视化的机器学习和深度学习工作流程,支持在TensorFlow、PyTorch和Scikit-learn等常用框架上开发模型。
- IBM Watson:Watson Studio提供了可视化的机器学习和深度学习工具,用户可以使用Jupyter Notebook和可视化工具创建、训练和部署模型。
- Alibaba Cloud:阿里云的机器学习平台PAI(Platform of AI)提供了可视化的机器学习和深度学习工作流程,用户可以使用自定义算法和可视化工具,实现模型的训练和优化。
这些云服务商提供了丰富的工具和资源,使得机器学习和深度学习更加容易,并且为所需的硬件资源提供了极大的灵活性和高效性。
模型格式
模型格式是训练的结果,选择一种模型格式来保持训练的结构,通常需要考虑以下几个方面:
- 模型性能:选择的模型格式是否能够保持较高的模型性能和精度,是否适合各种应用场景。
- 部署和使用:选择的模型格式是否易于部署和使用,在不同的平台和设备上是否易于移植和部署。
- 灵活性和可扩展性:选择的模型格式是否具有良好的灵活性和可扩展性,以便适应不同的应用需求和数据集大小。
- 应用广泛性:选择的模型格式是否被广泛应用和支持,是否有足够多的工具和资源来帮助模型开发和部署。
基于以上几个方面,目前较为常用的模型格式包括TensorFlow的SavedModel格式、ONNX格式、Keras的H5格式、PyTorch的.pt模型格式、caffe模型格式等。其中,ONNX格式被多个框架支持,可以实现模型的跨平台部署;PMML(Predictive Model Markup Language)是一种用于描述和部署预测模型的XML格式,它允许将多个厂商和开源软件系统中的预测模型保存到单个标准格式中;SavedModel格式具有良好的性能和扩展性;H5格式则适合于Keras模型的保存。多框架支持和开放的标准通常是我们的首选,ONNX同时满足多个机器学习框架支持,并有开放联盟负责制定模型格式,属于可以优先考虑的模型格式。
说明: ONNX是hugging face采用的格式
模型部署
模型的部署是指将训练好的模型应用到实际的生产环境中,以便进行自动预测和决策支持。模型部署的方式主要有以下几种:
- 本地部署:将模型部署到本地设备或服务器上,利用本地计算资源来进行预测和决策。
- 云端部署:将模型部署到云端平台上,将计算和存储资源移动到云端,并提供API或服务接口供外部应用调用。
- 边缘部署:将模型部署到边缘设备或设备群中,实现近端计算和“雾计算”,以便实现更低延迟的数据处理和决策。
在部署模型时,需要考虑以下几个方面:
- 模型格式:选择适合的模型格式进行部署,并根据具体需求进行优化和转换。
- 硬件资源:根据模型大小、计算量和延迟需求,选择适当的硬件资源和计算平台。
- 计算框架:选择支持模型的训练和推理的计算框架,并利用硬件资源进行高效的计算。
- 安全性和隐私:对模型和数据进行加密、访问控制和隐私保护,以保障数据安全和隐私。
- 监控和维护:对部署的模型进行监控和维护,及时识别和解决问题,并根据需要进行模型更新和升级。
总之,模型部署是机器学习和人工智能应用中的一个重要环节,需要综合考虑各种因素,选择适合的部署方式和方法,以实现高效、安全和稳定的模型服务。
一些框架会附带专门用于部署的项目,如:
模型格式和部署软硬的异构问题,使得基于docker部署已经成为主流的方案,极大的简化了部署环节也产生了一批托管部署的平台。以上部署方式通常使用REST接口进行调用,如果采用本地下载模型的方式可以通过框架接口调用模型进行预测。
数据库中的机器学习
将机器学习模型嵌入到数据库中,可以实现在数据库中进行数据预处理、特征工程和模型训练、验证、预测一体化,这种方法的优势包括:
- 减少数据集移动:传统机器学习流程通常需要通过复制数据集,将数据从数据库中提取并在其他程序中执行。将机器学习嵌入到数据库中,可以减少不必要的数据集移动,从而提高效率。
- 更快的预测速度:将模型嵌入到数据库中,可以实现原地预测,不需要在其他程序中导入模型。这也意味着,模型预测时间会更短。
- 更强的安全性:由于机器学习模型通常具有高度敏感性的数据企业级应用要求比较高的数据安全性能。因此,将机器学习模型和数据紧密结合,可以更好地3保护关键数据和模型,同时避免在数据传输过程中泄露敏感信息的风险。
- 更易于更新:将机器学习模型嵌入到数据库中,可以使得机器学习系统直接从数据中提取特征,而不需要对原始数据进行大量的预处理,从而在数据集更新后,模型可以更加轻松地使用最新数据更新模型。
数据库中机器学习的方法
基于存储过程(如pg的PL/Python)和UDF的方法,属于最长久的方法,但这种方法并不简单,需要编写高质量的代码并处理好各种数据格式和类型。有一些云厂商提供了工具帮助执行这些过程,如Oracle的Oracle Data Mining,Microsoft的SQL Server Data Mining,IBM的SPSS Modeler,Teradata的Teradata Warehouse Miner等。这些工具提供了一个交互式界面,通过指定模型参数和输入数据类型等信息,使得预测任务更简单。有些工具也支持开发自己的模型算法,从而对业务的需求进行更好的支持。
基于插件和扩展的方法,分为本地调用和远程调用:
- 本地调用是将模型部署在数据库实例的服务器,通过实现插件的方式在数据库执行过程中调用模型的接口。
- 远程调用是将深度学习模型部署到数据库外的服务器上进行预测,这个过程可以通过Web服务/API的方式来完成。当然,这种方法需要注意一些数据库和Web之间的连接和数据安全等问题。
基于第三方工具的方法,分离开预测和数据库,交给专业的工具解决,但存在处理数据流可能面对的问题,如时延、数据不一致、多套系统的维护成本等。
结合业界实现方案上看,主要分为四种:
- SQL wrapper,扩展SQL语法,并将其转为对直接调用底层AI引擎的机器学习算法,如SQLFlow
- SQL on AI engine, 让AI引擎直接指出SSQL语法及相关的查询优化器,但SQL的执行器使用的依然是AI引擎,如SparkSQL ML
- SQL based AI algorithmn, 基于SQL重写机器学习算法,将算法固化到数据库中,如openGauss、BigQuery ML
- UDA based AI algorithmn, 基于数据库的UDA实现机器学习算法,不同的场景可能使用不同的方式,如Python、R、C\C++ 等,这些算法也是内置在数据库中的,如madlib
数据库中机器学习的工具
- 数据库厂商如
- Oracle:Oracle Data Mining支持使用SQL语言来创建、训练和评估模型,但需要额外的许可证。
- Microsoft SQL Server:SQL Server Data Mining支持使用SQL语言进行模型训练和预测。
- IBM:IBM的SPSS Modeler支持使用SQL语言来生成预测函数。
- PostgreSQL:PG-Strom扩展提供了使用CUDA CUDNN以及基于图片数据的深度学习支持,但是需要额外的安装和配置。
- 云厂商提供如 Bigquery ML,是一种AutoML工具,可以在BigQuery(一款基于云计算的分布式数据仓库)内使用标准SQL实现模型的训练、评估和预测。BigQuery ML内置几种常见类型的模型,例如线性回归、逻辑回归和GBDT等,并且支持高度扩展和快速训练。
- 第三方工具,目前仅发现了 Mindsdb 一款基于SQL的自动化机器学习工具,它可以帮助用户快速从结构化数据中构建、训练和部署机器学习模型,无需深入了解机器学习的原理和算法,也不需要编写复杂的代码,其可以通过导入hugging face transformers里的模型扩展能力,也可以实现自己的ML handlers。
PS:虽然Madlib功能也类似但仅提供机器学习的能力;还有redis AI,但已经不是数据库领域了。
数据库中机器学习的挑战和未来
- 数据库中机器学习可能遇到的挑战和限制
- 深度学习中,模型的训练需要大量的计算资源,如果数据库不具备应用池化硬件资源的能力,无法胜任模型训练的工作
- 如何保证增加预测功能的同时避免出现性能问题和增加预测的错误处理机制是一个挑战
- 训练和预测是否引入配额机制防止对数据库系统稳定性的影响
- 数据库中机器学习的发展趋势和未来展望
- 模型开源是趋势,需要思考如何利用好外部模型
- AP系统引入AI的能力会极大的提升BI的效率,改善数据分析人员的使用体验,但并没有对AI流程做出实质性的改变
数据库的技术趋势
参考一下阿里云数据库的四化方向:
- 云原生化:资源解耦、serverless
- 平台化:基于云构建数据平台能力、OpenAPI标准
- 一体化:处理分析一体化、离线在线一体化、集中分布一体化、多模处理一体化
- 智能化:AI4DB简化运维、DB4AI挖掘数据价值
本文核心围绕DB4AI,属于比较细分的领域。
其他
- NL2SQL 自然语言转换为SQL,使得使用者无需掌握SQL复杂的写法,直接发出业务问题得到答案
- in-database Inference(基于数据库的内容生成)通过在数据库里保存常用模型仓库的模型调用方法来进行数据库内推理。