当前位置: 首页 > 科技观察

GitHub热门项目:如何构建生产级深度学习项目?

时间:2023-03-12 11:44:07 科技观察

在生产中部署深度学习模型可能具有挑战性,因为它远不止训练具有良好性能的模型那么简单。为了部署生产级深度学习系统,还需要适当设计和开发许多组件。本文介绍了GitHub上的工程指南,用于构建将部署在实际应用程序中的生产级深度学习系统。在这篇文章中,我们将详细介绍生产级深度学习系统的各个模块,并推荐适合每个组件的工具集和框架,以及从业者提供的最佳实践。一、资料管理1.1.数据源开源数据(良好的开端,但不是优势)、数据扩充和合成数据1.2。标注劳动力来源:众包服务公司:FigureEight招聘标注人员标注平台:Prodigy:一个由主动学习(由Spacy开发人员提供)支持的、支持文本和图像的标注工具。HIVE:用于计算机视觉的人工智能即服务平台。Supervisely:一个完整??的计算机视觉平台。Labelbox:计算机视觉。扩展AI数据平台(计算机视觉和自然语言处理)。1.3.存储数据存储选项:(1)对象存储:存储二进制数据(图像、声音文件、压缩文本)AamzonS3Ceph对象存储(2)数据库:存储元数据(文件路径、标签、用户活动等)。Postgres是大多数应用程序的正确选择,提供一流的SQL和对非结构化JSON的强大支持。(3)数据湖:用于聚合无法从数据库中获取的特征(如日志)。AmazonRedshift(4)FeatureStore:机器学习功能的存储和访问。FEAST(GoogleCloud,OpenSource)Michelangelo(Uber)在训练期间:将数据复制到本地或集群文件系统。1.4.版本控制DVC:机器学习项目的开源版本控制系统Pachyderm:数据版本控制Dolt:SQL数据库1.5的版本控制。Processing生产模型的训练数据可能来自不同的来源,包括数据库和存储数据、日志处理以及对象存储中其他分类器的输出。任务之间存在依赖关系,每个角色都需要完成其依赖关系才能开始。例如,对新日志数据的训练需要在训练前进行预处理。所以工作流在这方面变得相当重要。工作流程:Airflow(最常用)2.开发、培训和评估2.1.软件工程编辑器:VimEmacsVSCode(作者推荐):内置Git暂存和显示文件差异,Lint代码扫描,通过SSH远程打开项目。JupyterNotebooks:非常适合作为项目的起点,但难以扩展。Streamlit:带有小程序的交互式数据科学工具。建议:对于个人或初创企业:开发:4核图灵架构计算机。训练/评估:使用相同的4核GPU计算机。当运行许多实验时,可以购买共享服务器或使用云实例。对于大公司:开发:为每个机器学习科学家购买4核图灵架构计算机,或者让他们使用V100实例。培训/评估:使用具有适当配置和故障处理的云实例。2.2.资源管理为程序分配免费资源:资源管理选项:遗留集群作业调度程序(例如,Slurm工作负载管理器)Docker+KubernetesKubeflowPolyaxon(付费功能)2.3。深度学习框架除非有充分的理由不使用,否则使用TensorFlow/Keras或PyTorch。下图显示了不同框架在开发和生产中的比较。2.4.实验管理开发、培训和评估策略:始终从简单开始。在小批量上训练一个小模型,只有当它有效时,才能扩展到更大的数据和模型,并进行超参数调整。实验管理工具:Tensorboard:提供机器学习实验所需的可视化和工具。Losswise(机器学习监控)Comet:让您跟踪机器学习项目的代码、实验和结果。权重和偏差:通过轻松协作记录和可视化研究的每个细节。MLFlowTracking:用于记录参数、代码版本、指标和输出文件,以及结果的可视化。2.5.HyperparameterTuningHyperas:Kerashyperopt的简单包装器,使用简单的模板符号来定义要调整的超参数范围。SIGOPT:可扩展的企业级优化平台。Ray-Tune:一个可扩展的分布式模型选择研究平台(专注于深度学习和深度强化学习)。SweepsfromWeights&Biases:参数不是开发者明确指定的,而是机器学习模型近似学习得到的。2.6.DistributedTrainingDataParallelism:迭代时间过长时使用(TensorFlow和PyTorch都支持)。模型并行:当模型不适合单个GPU时使用。其他解决方案:RayHorovod3。故障排除“有待完善”4.测试和部署4.1。测试和CI/CD与传统软件相比,机器学习生产软件需要更多样化的测试套件:单元测试和集成测试测试类型:TrainedSystem测试:测试训练管道。验证测试:在验证集上测试预测系统。功能测试。持续集成:在将每个新代码更改推送到存储库后运行测试。用于持续集成的SaaS:CircleCI、TravisJenkins、Buildkite4.2。网络部署(1)由预测系统和服务系统组成,考虑规模服务预测。使用RESTAPI提供预测性HTTP请求。调用预测系统响应预测系统:处理输入数据并进行预测。服务系统(Web服务器):(2)服务选择:DockerKubernetes(现在最流行的)MESOSMarathon通过模型服务方案部署。将您的代码部署为“无服务器函数”。(3)模型服务:Tensorflow服务MXNet模型服务器Clipper(Berkeley)SaaS解决方案(Seldon,算法)专为机器学习模型的网络部署而设计。GPU推理的批量请求。Framework:TensorflowServing,MXNetModelServer,Clipper,SaaSsolution(Seldon,Algorithm)(4)Decision:TensorFlowServingorClipperAdaptivebatching有用。如果CPU推理足够,则更可取。通过添加更多服务器或无服务器进行扩展。CPU推理:GPU推理:4.3服务网格和流量路由从单体应用程序过渡到分布式微服务架构可能具有挑战性。服务网格(由微服务网络组成)降低了此类部署的复杂性并减轻了开发团队的压力。Istio:一种服务网格技术,它简化了已部署服务网络的创建,而服务中的代码更改很少或没有。4.4.监控目的:关于停机、错误和分布变化的警报。抓取服务和数据回归。此外,云提供商的解决方案也相当不错。4.5.在嵌入式和移动设备上的部署主要挑战:内存占用和计算约束解决方案:DistillBERT(用于自然语言处理)MobileNets模型大小的量化缩减知识蒸馏嵌入式和移动框架:TensorflowLitePyTorchMobileCoreMLMLKitFRITZOpenVINO模型转换:OpenNeuralNetworkExchange(ONNX):深度学习模型的开源格式。4.6.一体化解决方案TensorflowExtended(TFX)Michelangelo(Uber)GoogleCloudAIPlatformAmazonSageMakerNeptuneFLOYDPaperspaceDeterminedAIDomino数据实验室TensorflowExtended(TFX)Airflow和KubeFlowMLPipelines