将jupyter笔记本转换为nuclio

nuclio-jupyter的Python项目详细描述


python和jupyter的nuclio函数自动化

生成状态许可证

用于自动生成和部署nuclio的python包 来自代码、存档或jupyter笔记本的无服务器功能。 提供了一个强大的自动代码和函数生成机制, 简单的调试、生命周期管理和与数据科学工具的本机集成。

该软件包提供以下功能
  • 自动将代码/文件+依赖项(环境、包配置、数据/文件)转换为nuclio函数规范或存档
  • 自动将nuclio函数(代码、规范或存档)构建并部署到群集上
  • 提供与jupyter的本地集成
  • 根据外部对象存储(s3、http/s、git或iguazio)处理函数+规范版本控制和归档
什么是nuclio?

Nuclio是一个运行在Docker或Kubernetes上的高性能无服务器平台 并自动化代码的开发、操作和扩展(使用多种受支持的语言编写)。 nuclio函数可以通过http、流行的消息/流协议、计划的事件和批处理触发。 nuclio可以作为托管产品在云中运行,也可以在任何kubernetes集群(cloud、on prem或edge)上运行
了解更多关于nuclio的信息…

nuclio和这个包是iguazio托管数据科学平台的一个组成部分,您可以在iguazio教程中看到许多端到端的使用示例和笔记本。

它是如何工作的?

nuclio take code+函数规范+可选文件工件,并自动将它们转换为Kubernetes上的自动缩放服务。 这些工件可以作为yaml文件(带有嵌入代码)、dockerfile或archives(git或zip)提供。 函数规范允许您定义从cpu/mem/gpu需求、包依赖项、环境变量、机密、共享卷到所有的东西。API网关配置等。

这个包试图通过更抽象的api和%nucliomagic命令来简化配置和部署,这些命令最终以yaml或归档格式构建代码+规范工件。 (当需要打包其他文件或进行版本控制时,最好使用存档)

%nucliomagic命令使用简单,但如果您需要更多 可编程性使用python api调用创建和部署函数 (build_filedeploy_filedeploy_code)来自您的代码或笔记本电脑。

用法

安装

pip install  --upgrade nuclio-jupyter

通过在单元格中运行以下命令安装到Jupyter笔记本中

# nuclio: ignore
!pip install --upgrade nuclio-jupyter

要访问库,请使用import nuclio

使用%nucliomagic创建和调试函数

%nuclio魔术命令和一些注释符号(例如\nuclio:ignore) 帮助我们提供非侵入性的提示,告诉我们如何将笔记本转换成一个完整的功能+规范。 我们不打算包含在最终函数中的单元格(例如打印、绘图、调试代码等)的前缀是nuclio:ignore 如果我们希望环境变量和包安装等设置自动出现在功能规范中 我们使用envcmd命令,这些命令将自己复制到函数规范中。

< Buff行情>

注意:如果要忽略笔记本开头的许多单元格(例如 数据探索和模型训练)我们可以在第一个相关的代码单元使用 而不是用"忽略"来标记上面的所有单元格 < BR>

编写完代码后,我们可以使用内置的nucliocontext对象模拟代码 (参见:调试函数)完成后,我们可以使用export命令生成函数yaml/archive 或者使用deploy在nuclio/kubernetes集群上自动部署功能。

我们可以使用其他命令,如show来打印生成的函数+规范, config设置各种规格参数(如CPU/Mem/GPU要求、触发器等); 以及mount将共享卷自动装入函数。

更多细节使用%nuclio帮助%nuclio帮助<;命令>;

示例:

可以看到以下配置资源、编写和测试代码的示例, 部署函数,并测试最终函数。 注意,无服务器函数有一个入口点(handler),由运行时引擎和触发器调用。 处理程序携带两个对象,acontext(运行时对象,如logger)和event (由客户端或触发器传递的主体和其他属性)。

我们从importnucilo包开始,初始化%nucliomagic命令和context对象 此部分不应复制到函数中,因此我们用nuclio:ignore

标记此单元格。
# nuclio: ignoreimportnuclio

功能规格/配置

以下部分设置环境变量,安装所需的包, 并设置一些特殊配置(例如,设置用于功能的基本docker图像)。 注意,环境变量和包将部署在笔记本和函数中, 我们可以指定只对本地(-l)或nuclio规范(-c)感兴趣。 我们可以在那些带有${var_name}的命令中使用本地环境变量,有关详细信息,请参见help

< Buff行情>

注意:%用于单行命令,%表示该命令应用于整个单元格,请参见详细信息

%nuclio cmd pip install textblob
%nuclio env TO_LANG=fr
%nuclio config spec.build.baseImage = "python:3.6-jessie"

magic命令只接受常量值或局部环境变量作为参数 如果您对更大的灵活性感兴趣,请使用nuclio.build_file()nuclio.deploy_file() api调用,请参见使用python api创建和部署函数rel="nofollow">python api调用

功能代码

在您想成为管理员的单元格中,您可以使用以下两种方法之一:

  • 创建def处理程序(上下文、事件)函数(传统的nuclio方式)
  • 或者用%%nuclio handler标记一个单元格,这意味着这个单元格是handler函数(jupyter方式)

当使用第二种方法时,我们在返回行的末尾使用nuclio:return标记返回行。

本地功能测试

我们可以使用内置的nucliocontextnuclio.event对象在本地模拟我们的函数, 我们创建一个事件对象(消息体、头等)并用 context对象和新的事件对象,这将模拟生成的事件触发器。 我们还可以使用for循环来模拟具有多个事件的函数

# nuclio: ignoreevent=nuclio.Event(body=b'good morninng')handler(context,event)

功能构建或部署

完成后,我们使用%nuclio deploy命令构建函数并在实际集群上运行它, 注意deploy命令返回一个有效的http端点,可用于测试/使用我们的实际功能。

将代码部署为项目ai下的nuclio函数nlp

%nuclio deploy -n nlp -p ai

如果我们只想生成函数code+spec或 存档和/或上载/提交到外部存储库,而不在群集中运行它们 这也可以用于自动化的ci/cd,可以构建函数并将其推送到git 并触发一个ci进程,该进程只在函数通过测试后才部署该函数。

如果要在部署之前查看生成的代码和yaml配置文件,请使用%nuclio show命令

要获得更大的灵活性,请使用nuclio.build_file()nuclio.deploy_file()api调用,请参见下面的示例:

# nuclio: ignore# deploy the notebook code with extra configuration (env vars, config, etc.)spec=nuclio.ConfigSpec(config={'spec.maxReplicas':2},env={'EXTRA_VAR':'something'})addr=nuclio.deploy_file(name='nlp',project='ai',verbose=True,spec=spec,tag='v1.1')# invoke the generated function resp=requests.get('http://'+addr)print(resp.text)
< Buff行情>

注意:包含nuclio:ignore注释的单元格将在生成中被忽略 过程:

< H3>例如笔记本:

 src=

访问此链接以查看完整的笔记本 ,或查看此其他示例

为上述笔记本生成的功能规范如下:

apiVersion:nuclio.io/v1kind:Functionmetadata:name:nuclio-examplespec:build:baseImage:python:3.6-jessiecommands:-pip install textblobnoBaseImagesPull:trueenv:-name:TO_LANGvalue:frhandler:handler:handlerruntime:python:3.6

使用jupyter ui导出函数

在许多情况下,我们只想将函数导出到一个yaml/zip文件中,然后手动加载到nuclio(例如,通过nuclio ui)。 这个包自动注册为jupyter转换器,允许将笔记本导出为nuclio格式, 请参见下面的示例,在jupyter笔记本中选择文件/download as/nuclio。 < Buff行情>

注意:您可能需要将笔记本标记为可信的,以便nuclio选项显示

 src=

或者您可以运行

jupyter nbconvert --to nuclio example.ipynb

这将创建带有代码、规范和额外文件的example.yamlexample.zip(如果函数包含额外文件)。

我们目前不支持Google Colaboratory、Kaggle笔记本和其他定制Jupyter版本。

导出、版本控制和存档功能

nuclio函数是提供定义良好的代码+依赖项+环境定义的好方法, 功能可以通过简单地存储和重新应用其工件来进行版本控制、存档和恢复。

在我们使用%nucliomagic命令或直接从api定义函数之后,我们可以buildthem, 我们还可以使用addmagic命令或filesapi属性将多个文件打包在同一个zip归档文件中,其中包含代码和规范, 本地存储或使用单个命令将存档文件上载到云存储。

当我们想从url或归档文件部署函数时,我们使用deploy命令或api, 指定URL(相对于代码或笔记本)作为源,该功能将自动部署。

我们目前支持以下存档选项:
本地/共享文件系统,未经身份验证的http,或具有基本身份验证、github、aws s3和iguazio paas。

< Buff行情>

注意:此时nuclio不支持直接从受机密保护的s3存储桶中提取存档文件

有关详细信息,请参见下面的builddeploy命令帮助

使用魔术命令的示例

指定要与函数一起打包的其他文件(将强制使用zip

pip install  --upgrade nuclio-jupyter
0

将当前笔记本转换为功能存档并上载到远程对象存储区

pip install  --upgrade nuclio-jupyter
1

从存档中部署和旧版本,并将其命名为newfunc

pip install  --upgrade nuclio-jupyter
2 < Buff行情>

注意:builddeploy命令不必在同一个笔记本上运行,有关详细的命令选项,请参见help

使用API的示例
pip install  --upgrade nuclio-jupyter
3

直接从存档或Git部署功能或版本

用户可以从存档(.zip文件)或Git存储库部署功能, 并重写各种函数spec参数(例如,更改环境变量, 添加自定义触发器等)。

函数是版本化的(使用标记属性),我们可以从版本加载 并在一个版本(可以有不同的标签)下部署

要从存档部署,必须指定存档源URL(必须以 http://v3io://git://

示例:

pip install  --upgrade nuclio-jupyter
4 <H3>表Oy直接从Github运行

示例:从nuclio示例存储库部署函数

pip install  --upgrade nuclio-jupyter
5

git url约定是:git://[token@]github.com/org/repo\master[:<;workdir>;], 令牌仅用于私有存储库,也可以通过 git_access_token环境变量。

workdir是可选的,请指定存储库中函数的子目录

要将函数工件(function.yaml+code+额外文件)上载到git,可以使用构建生成工件 命令(指定所需的output dir),然后提交更新并将其推送到git repo中。

请注意,您可以在url中指定所需的分支。

使用python api创建和部署函数

在某些情况下,在笔记本上工作是一种过火的做法,或者我们可能希望以编程方式生成代码和配置, nuclio包提供两个主要的函数调用deploy_codedeploy_file它们允许我们直接访问,如下所示:

pip install  --upgrade nuclio-jupyter
6 代码允许从各种文件格式中部署函数(<代码>代码> >代码> > > ><代码>build_文件api相当于%nuclio buildmagic命令(创建可部署的函数或存档并可以上载它)

运行非python函数

该库不仅限于python代码,还支持其他语言,如go, <代码>节点.js<代码> >代码> java/COD>,和<代码> BASH < /代码>。请参阅下面的bash代码示例。注意 您可以使用build命令(cmd=)在函数中安装任何包/二进制文件。

pip install  --upgrade nuclio-jupyter
7

输出:

pip install  --upgrade nuclio-jupyter
8

控制功能代码和配置

<命令>

运行命令,将其添加到导出配置中的"build.commands"。

pip install  --upgrade nuclio-jupyter
9

如果您只想将说明添加到function.yaml 在本地运行它,使用'--config only'或'-c'标志

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
0

Env

设置环境变量。将更新配置中的"spec.env"。

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
1

如果您只想将说明添加到function.yaml 在本地运行它,使用'--config only'或'-c'标志

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
2

如果您只想在本地运行而不想将指令添加到 function.yaml,使用'--local only'或'-l'标志

环境文件

从文件设置环境。将更新配置中的"spec.env"。

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
3

处理程序

将此单元格标记为处理程序函数。您可以提供可选名称

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
4

安装

将共享文件卷装入函数。

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
5

配置

设置函数配置值(资源、触发器、生成等)。 值需要数值、字符串或json字符串(1,"debug",3.3,{..}) 您可以使用+=将值附加到列表。

参见nuclio配置参考

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
6

构建

建立笔记本/代码+配置,生成/上传yaml或存档。

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
7

展开

使用配置为nuclio功能的笔记本/文件进行部署。

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
8

显示

打印出功能代码和规范(yaml)。 在调用此功能之前,您应该保存笔记本。

高级主题

nuclioinit_context()hook用于初始化资源(跨调用)

context.logger详细级别更改为调试

默认情况下,内置上下文对象设置为打印信息级及以上级别的日志, 如果要打印调试级日志,可以键入以下内容

# nuclio: ignore
!pip install --upgrade nuclio-jupyter
9

日志记录级别仅适用于笔记本/模拟,以更改函数运行时 日志级别您应该使用config或nuclio用户界面。

使用Docker

您可以构建一个Docker图像并进行尝试

构建

# nuclio: ignoreimportnuclio
0 <运行< > >
# nuclio: ignoreimportnuclio
1

然后在http://localhost:8888" rel="nofollow">http://localhost:8888"打开浏览器

链接

开发

我们使用的是作为包管理器的pipenv。安装 依赖项运行

# nuclio: ignoreimportnuclio
2

要运行测试,请运行

# nuclio: ignoreimportnuclio
3

要上载到pypi,请在中更改版本后运行make uploadnuclio/\uu init\uu.pypython cut\u release<;version>;。后者将更新 nuclio/\u init.py中的版本。下一个版本可以使用+。问 提供PYPI证书。

许可证

apache 2.0(请参见license.txt)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spinner选定值未上载到firebase数据库   java如何通过bukkit中的配置添加消息?   java在SharedReference中保存列表的泛型类型   javascript Java小程序未定义   swt在Java中构建控制台应用程序   java OAuth同意屏幕没有突然显示,没有错误?   java webview选择文件安卓不工作   java Spring boot JPA如何从同一连接添加多个数据库?   java JDBC DB2驱动程序计时器线程处于阻塞状态   java我在vscode中运行flatter时看到一个错误在phone中运行应用程序somone能否帮助我plz   Java:生成JSON:如何避免生成不完整的JSON   java Date compareTo()方法始终返回1   当使用Junit runner运行测试时,java Spring自动连线失败   java Android/Sockets如何将信息从主UI线程发送到socket线程?   java Android内存声明全局变量   java如何在JBoss中拥有多个具有相同JNDI名称的数据源?   python在Java中嵌入CPython时,为什么会挂起?   java如何提供深度模拟对象?   java“find:smallint,expected:integer”Hibernate对informix数据库的验证在短时间内失败