广告
返回顶部
首页 > 资讯 > 后端开发 > Python >开发函数计算的正确姿势——tensor
  • 267
分享到

开发函数计算的正确姿势——tensor

函数姿势正确 2023-01-31 08:01:14 267人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。
Fun: Fun 是一个用于支持 serverless 应用部署的工具,能帮助您便捷地管理函数计算、api 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档参考。

备注: 本文介绍的技巧需要 Fun 版本大于等于 2.13.0。

依赖工具

项目是在 MacOS 下开发的,涉及到的工具是平台无关的,对于 linuxwindows 桌面系统应该也同样适用。在开始本例之前请确保如下工具已经正确的安装,更新到最新版本,并进行正确的配置。

Fun 和 Fcli 工具依赖于 docker 来模拟本地环境。

对于 MacOS 用户可以使用 homebrew 进行安装:

brew cask install docker
brew tap vangie/fORMula
brew install fun
brew install fcli

Windows 和 Linux 用户安装请参考:

  1. https://GitHub.com/aliyun/fun/blob/master/docs/usage/installation.md
  2. Https://github.com/aliyun/fcli/releases

安装好后,记得先执行 fun config 初始化一下配置。

注意, 如果你已经安装过了 fun,确保 fun 的版本在 2.13.0 以上。

$ fun --version
2.13.0

背景

ai model serving 是函数计算一个比较典型的应用场景。数据科学家训练好模型以后往往需要找软件工程师把模型变成系统或者服务,通常把这个过程称之为 model serving。函数计算无需运维和弹性伸缩的特性,正好符合数据科学家对高可用分布式系统的诉求。本文将介绍把一个 Tensorflow CharRNN 训练的自动写五言绝句古诗的模型部署到函数计算的例子。由于 python TensorFlow 依赖库和训练的模型的文件有数百兆,即使压缩也远超了函数计算 50M 代码包大小的限制。对于这类超大体积的文件,采用 NAS 文件系统是最佳选择。本文会介绍一种 Fun + NAS 的方法来解决 tensorflow serving 问题。

快速开始

1. 克隆 poetry 项目

git clone https://github.com/vangie/poetry.git

2. 修改 template.yml 文件

修改下面的 VPC 配合和 NAS 配置,这部分配置需要分别去相应的控制台进行创建并把对应的值拷贝出来。

VpcConfig:
  VpcId: 'vpc-uf6r2qatgfbdhgy2rhplo'
  VSwitchIds: [ 'vsw-uf669ekf9zser1hrmgru4' ]
  SecurityGroupId: 'sg-uf6jcqx1ogbr37hkvgxv'
NasConfig:
  UserId: 10003
  GroupId: 10003
  MountPoints:
    - ServerAddr: '3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com:/'
    MountDir: '/mnt/nas'

3. 安装依赖

  1. 执行 fun install 安装依赖。fun.yml 文件里声明了 tensorflow 的依赖和包括了训练模型的脚本命令,所以执行会比较费时。
  2. 执行 fun local invoke poetry,这一步主要是为了生成 .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com 目录。
  3. 执行 cp -R .fun/Python .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/lib/将第一步安装的 tensorflow 依赖包拷贝到本地的 nas 目录。
  4. 执行 cp -R model .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/ 将第一步训练的模型拷贝到本地的 nas 目录

4. 本地测试

执行 fun local invoke poetry ,正确的返回结果如下

$ fun local invoke poetry                                             
Reading event data from stdin, which can be ended with Enter then Ctrl+D
(you can also pass it from file with -e)
mouting local nas mock dir /Users/vangie/Desktop/poetry/.fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/ into container /mnt/nas

skip pulling image aliyunfc/runtime-python3.6:1.5.2...
FunctionCompute python3 runtime inited.
FC Invoke Start RequestId: 938334c4-5407-4a72-93e1-6d59e52774d8
.......(省略了部分日志)
不见江中客,无言此别归。
江风秋雨落,山色夜山长。
不问江南客,孤舟在故乡。
一年如远别,何处是归人。
一夜无人

RequestId: 938334c4-5407-4a72-93e1-6d59e52774d8          Billed Duration: 14074 ms       Memory Size: 1998 MB    Max Memory Used: 226 MB

5. 上传文件至 NAS

目前 NAS 服务尚未提供直接上传文件的 API 和命令行。NAS 控制台提供的上传方式是先上传到 OSS,再由 OSS 导入 NAS 的功能,该功能需要申请开通。此外还有两种方法:

  1. nas.sh —— 在 FC 里部署一个拷贝函数。这个方法目前有个限制,无法拷贝大于 6M 的文件。
  2. 购买一台最便宜的按周计费的 ECS(大概 9 元钱),借助 ECS 的把文件拷贝进去。

下面我们假设 ecs 已经买好了,然后使用下面的命令拷贝文件到 nas 并解压

# 挂载 nas 网盘
mount -t nfs -o vers=4.0 3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com:/ /mnt/nas

# 压缩本地要上传的目录
cd .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/
tar -czvf nas.tar.gz lib model

# 拷贝到 nas 目录
scp nas.tar.gz root@47.103.83.174:/mnt/nas

# 解压
tar -xvf nas.tar.gz

6. 部署和调用

$ fun deploy             
using region: cn-shanghai
using accountId: ***********4733
using accessKeyId: ***********EUz3
using timeout: 60

Waiting for service poetry to be deployed...
        Waiting for function poetry to be deployed...
                Waiting for packaging function poetry code...
                package function poetry code done
        function poetry deploy success
service poetry deploy success

$ fcli function invoke -s poetry -f poetry
换<unk>金龙瑁旒鸯垓疠萏萏瑁蟀瑁鸪雳萏萏萏蟀雳萏雳瑁雳瑁萏瑁瑁瑁鸪鸪蟀蟀蟀鸪蟀蟀萏萏萏蟀瑁萏蓉熳珑蟀熳萏缈皪惮萏萏皪惮皪琶萏萏珑琵疠缈轳寞雨风香。
春山无处处,秋色向江流。
不是东南望,孤山有一情。
春风不可见,一日向江流。
不见无人去,无时见白头。
相思一相见,相见一中风。
何日一相识,何人有此心。
何年不可识,相忆在江山。
一日一秋水,何来一山风。
相逢有何计,不见故人心。
不得何人去,无年不自同。
一来多此路,何处不堪寻。
此日多无事,无时自不知。
何年无此处,不是不相逢。
一日无如远,春风不自归。
何当有君客,不见旧人情。
此去相思处,不堪何处归。
不知青柳外,不得不堪亲。
不见青花去,无人

至此,已经将古诗创作程序成功部署到函数计算了。

参考阅读

  1. 《21 个项目玩转深度学习——基于TensorFlow 的实践详解》



本文作者:倚贤

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

--结束END--

本文标题: 开发函数计算的正确姿势——tensor

本文链接: https://www.lsjlt.com/news/192525.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 开发函数计算的正确姿势——tensor
    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行...
    99+
    2023-01-31
    函数 姿势 正确
  • 开发函数计算的正确姿势 —— 爬虫
    在 《函数计算本地运行与调试 - Fun Local 基本用法》 中,我们介绍了利用 Fun Local 本地运行、调试函数的方法。但如果仅仅这样简单的介绍,并不能展现 Fun Local 对函数计算开发的巨大效率的提升。这一次,我们拿一个...
    99+
    2023-06-03
  • 开发函数计算的正确姿势 —— 安装第三
    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行...
    99+
    2023-01-31
    函数 姿势 正确
  • 开发函数计算的正确姿势 —— 使用 Fun Local 本地运行与调试
    前言首先介绍下在本文出现的几个比较重要的概念:函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码...
    99+
    2023-06-03
  • Java中打包同步函数的正确姿势是什么?
    在Java中,同步函数可以让我们更好地控制多个线程对共享资源的访问,从而避免线程安全问题。但是,如果同步函数不正确地使用,就会导致性能下降或者死锁等问题。因此,在Java中打包同步函数的正确姿势是非常重要的。 一、synchronized...
    99+
    2023-09-29
    打包 同步 函数
  • Windows环境下PHP开发,解决PATH问题的正确姿势
    在Windows环境下进行PHP开发时,经常会遇到PATH问题。这个问题很常见,但是解决起来并不难。本文将会介绍Windows环境下PHP开发的正确姿势,包括如何解决PATH问题。 环境变量 在Windows环境下,环境变量是非常重要的...
    99+
    2023-07-22
    开发技术 windows path
  • Python开发者面向文档编程的正确姿势是什么
    这篇文章将为大家详细讲解有关Python开发者面向文档编程的正确姿势是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。概述秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也!...
    99+
    2023-06-17
  • 重定向操作的正确姿势:PHP异步编程开发技术解析?
    重定向操作的正确姿势:PHP异步编程开发技术解析 随着互联网应用的普及,Web开发技术也在不断地发展和演进。其中,重定向操作是Web开发中的一项基础技术,它可以实现网页之间的跳转、访问权限的控制等功能。PHP作为一门流行的Web开发语言,其...
    99+
    2023-06-20
    异步编程 重定向 开发技术
  • PHP函数和JavaScript数据类型:如何在Web开发中选择正确的工具?
    Web开发需要掌握多种编程语言和技术,其中PHP和JavaScript是最常用的两个语言。PHP是一种服务器端语言,而JavaScript则是一种客户端语言。在Web开发中,经常需要使用PHP函数和JavaScript数据类型来完成各种任...
    99+
    2023-11-14
    函数 javascript 数据类型
  • 函数编程在Go和Django中的应用:算法开发的新趋势?
    函数编程是一种程序设计范式,它将计算机程序视为数学函数的组合,从而避免了副作用和共享状态等问题。这种编程风格在近年来日益流行,不少编程语言也开始支持函数式编程。在本文中,我们将探讨函数式编程在Go和Django中的应用,以及如何利用函数式...
    99+
    2023-10-07
    django 函数 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作