tensorflow.js 的服务器端安装 - 分享自 @开发者头条

简介: tensorflow.js 的服务器端安装 - 分享自 @开发者头条

tensorflow是谷歌推出的一款神经网络算法库,利用这个算法库可以实现深度学习。目前这个算法库已经绑定了多种开发语言,而tensorflow.js就是Javascript语言的具体实现,在tensorflow的官网上有专门的Javascript板块,地址:https://www.tensorflow.org/js。tensorflow.js的最初版本只能运行在浏览器中,借助webgl调用GPU资源实现快速运算,但是毕竟浏览器功能有限,项目中也不太可能会把一个深度学习的流程丢到前端去处理。后来官方又推出了两个node版本,一个基于CPU,另一个基于GPU。本文主要介绍这两种库的后端安装方法。

前期准备

  1. 确定服务器的操作系统和硬件是否符合安装要求,参考https://www.npmjs.com/package/@tensorflow/tfjs-node
  2. 电脑或者服务器一定要安装python2.7的环境(注意不能安装python3)
  3. 使用npm全局安装node-gyp这个库
  4. windows需要安装vs studio(需要有vcxproj编译组件),mac需要安装xcode
  5. gpu版本需要确认显卡是否能够支持(注:mac所有系统都不支持gpu),参考https://developer.nvidia.com/cuda-gpus
  6. gpu版本需要安装好显卡驱动
  7. gpu版本需要安装CUDA工具包,推荐10.0,网址:https://developer.nvidia.com/cuda-toolkit-archive
  8. gpu版本需要下载CUDNN SDK,版本必须和上一步中的CUDA工具包版本匹配,下载解压后把对应文件夹的文件覆盖到上一步的安装目录中,网址https://developer.nvidia.com/cudnn,这里下载前需要注册会员
  9. gpu版本需要添加CUDA、CUPTI和cuDNN到系统环境变量,windows和linux方法不同,参考https://www.tensorflow.org/install/gpu

如果安装CPU版本,只需要准备1-4步,GPU版本则需要1-9的所有步骤。

到这里,你已经完成了tensorflow服务器版本的一半安装。

安装tensorflow到node项目

接下来我们需要把@tensorflow/tfjs-node(@tensorflow/tfjs-node-gpu)安装到项目依赖中,其实只需要下面这一步:

npminstall @tensorflow/tfjs-node

或者

npminstall @tensorflow/tfjs-node-gpu

运气好的话你会看到一个很长的下载过程,一大串代码编译过程,最后安装成功!但是!

绝大多数都会遇到莫名其妙的问题,譬如卡在了下载进度上,或者报一些node-gyp的错误。一般来说,@tensorflow/tfjs-node如果安装出现问题,多装两次就行。但是@tensorflow/tfjs-node-gpu出问题的话,就需要具体问题具体分析。

GPU版本安装问题解决思路

  1. 卡在下载进度条的问题:

这个主要是由于gpu版本需要下载一个将近250M的libtensorflow包,而国内访问谷歌服务器又不是特别稳定,下载过程经常掉线。解决方法是可以间断性地重复执行npm rebuild @tensorflow/tfjs-node-gpu -f。或者修改node_modules/@tensorflow/tfjs-node-gpu/scripts/install.js文件,将其中的storage.googleapis.com域名修改成本地的https服务,然后用下载工具单独把libtensorflow包下载到https目录,通过本地下载实现稳定安装。另外可能有同学考虑用科学上网的方法获取稳定下载,本人亲测效果不咋地。

  1. node-gyp错误:

下载libtensorflow包后,tensorflow的钩子会继续执行代码编译,node-gyp会调用本地环境对下载源码进行编译。编译过程出错就会出现node-gyp的错误。

这种编译错误大多数都是本地编译环境缺失导致的,譬如windows中vs studio缺失相应的项目编译组件,这种问题一般通过下载缺失的组件就能完美解决!

CPU vs GPU

GPU版本的tensorflow一定比CPU版本的快吗?我一开始折腾安装了两个版本的tensorflow就是想看看GPU到底比CPU快了多少。实际我的项目主要运行了LSTM时序神经网络,测试跑下来的结果傻了眼,GPU速度只有CPU的2/3。为什么呢?Tensorflow的一位参与者给出了答案,地址在这里: https://github.com/tensorflow/tfjs/issues/468。大意就是:GPU版本绝大多数的运行时间都消耗在了数据传输过程,对于一些相对单一神经网络结构,速度反而会比CPU版本慢,但是像加入了池化层的这种复杂神经网络结构,GPU的速度会快得多。所以根据网络结构选择对tensorflow的版本非常重要!

结语

上面这个故事告诉我们,付出的努力不一定和结果成正比,选择大于努力。

(全文完)

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
8天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
72 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
1月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
28 2
2024年5月node.js安装(winmac系统)保姆级教程
|
20天前
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
32 8
|
23天前
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
29天前
|
Ubuntu 网络协议 关系型数据库
超聚变服务器2288H V6使用 iBMC 安装 Ubuntu Server 24.04 LTS及后续系统配置
【11月更文挑战第15天】本文档详细介绍了如何使用iBMC在超聚变服务器2288H V6上安装Ubuntu Server 24.04 LTS,包括连接iBMC管理口、登录iBMC管理界面、配置RAID、安装系统以及后续系统配置等步骤。
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
58 4
|
1月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
48 1
|
1月前
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
1月前
|
缓存 负载均衡 监控
性能优化:Node.js高效服务器开发技巧与最佳实践
【10月更文挑战第29天】在Node.js服务器开发中,性能优化至关重要。本文介绍了几种高效开发的最佳实践,包括使用缓存策略、采用异步编程、实施负载均衡和性能监控。通过示例代码展示了如何实现这些技术,帮助开发者构建更快、更稳定的Node.js应用。
76 2
|
1月前
|
存储 JavaScript 前端开发
decimal.js库的安装和使用方法
【10月更文挑战第24天】decimal.js 是一个非常实用的高精度计算库,通过合理的安装和使用,可以在 JavaScript 中实现精确的数值计算和处理。你可以根据具体的需求和项目情况,灵活运用该库来解决数字精度丢失的问题。
下一篇
DataWorks