Fastapi-FastAPI框架,高性能,易学,编码速度快,可投入生产

FastAPI框架,高性能,易学,编码速度快,可投入生产


文档https://fastapi.tiangolo.com

源代码https://github.com/tiangolo/fastapi


FastAPI是一种现代、快速(高性能)的Web框架,用于使用Python 3.6+基于标准Python类型提示构建API

主要功能包括:

  • 快地:非常高的性能,可与节点JS(多亏了斯塔莱特和皮丹蒂克)One of the fastest Python frameworks available
  • 快速编码:提高功能开发速度约200%至300%。*
  • 更少的错误:减少约40%的人为(开发人员)引起的错误。*
  • 直观:强大的编辑支持。无处不在的完成度。调试时间更短
  • 简单易懂:设计成易于使用和学习。减少阅读文档的时间
  • 短的:最大限度地减少代码重复。来自每个参数声明的多个功能。更少的错误
  • 健壮:获取可投入生产的代码。使用自动交互文档
  • 基于标准的:基于(并完全兼容)API开放标准:OpenAPI(以前称为Swagger)和JSON Schema

*基于对内部开发团队、构建生产应用程序的测试进行估计

意见

[.]我在用FastAPI这几天有一吨多。[.]实际上我正计划把它用在我所有团队的微软的ML服务他们中的一些人正在融入核心窗口产品和一些办公室产品

卡比尔汗-微软(ref)

我们采用了FastAPI库以派生睡觉可以查询获取的服务器预测[路德维希]

皮耶罗·莫利诺,雅罗斯拉夫·杜丁和赛苏曼斯·米利亚拉-优步(Uber)(ref)

Netflix我很高兴地宣布我们的危机管理编排框架:派单好了![使用以下组件构建FastAPI]

凯文·格利森,马克·维拉诺瓦,福里斯特·蒙森-Netflix(ref)

我欣喜若狂FastAPI太好玩了!

布莱恩·奥肯-Python Bytes播客主持人(ref)

老实说,你建造的东西看起来非常坚固和精美。在很多方面,这是我想要的拥抱一下是-看到有人建造这样的建筑真的很鼓舞人心

蒂莫西·克罗斯利-Hug创建者(ref)

如果你想学一门现代框架要构建睡觉API,请查看FastAPI[.]它快速、易用、易学。

我们已经切换到FastAPI为了我们的API接口[.]我想你会喜欢的。

Ines Montani-Matthew Honnibal-Explosion AI创始人-spaCy创作者(ref)(ref)

要求

Python 3.6+

FastAPI站在巨人的肩膀上:

安装

$ pip install fastapi

---> 100%

您还需要一台ASGI服务器用于生产,例如UvicornHypercorn

$ pip install uvicorn[standard]

---> 100%

示例

创建它

  • 创建文件main.py使用:
from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}
或使用async def

如果您的代码使用async/await,使用async def

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

注意事项

如果您不知道,请查看“赶时间?”部分关于async and await in the docs

运行它

使用以下命令运行服务器:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
关于命令uvicorn main:app --reload

该命令uvicorn main:app指的是:

  • main:文件main.py(Python“模块”)
  • app:在中创建的对象main.py用这条线app = FastAPI()
  • --reload:使服务器在代码更改后重新启动。这样做只是为了发展。

检查一下

在以下位置打开您的浏览器http://127.0.0.1:8000/items/5?q=somequery

您将看到JSON响应为:

{"item_id": 5, "q": "somequery"}

您已经创建了一个API,该API:

  • 中接收HTTP请求。路径//items/{item_id}
  • 两者都有路径拿走GET运营(也称为HTTP方法:)
  • 这个路径/items/{item_id}有一个路径参数item_id这应该是一个int
  • 这个路径/items/{item_id}有一个可选的str查询参数q

交互式API文档

现在转到http://127.0.0.1:8000/docs

您将看到自动交互API文档(由提供Swagger UI):

替代API文档

现在,请转到http://127.0.0.1:8000/redoc

您将看到替代自动文档(由提供ReDoc):

示例升级

现在修改该文件main.py接收来自PUT请求

使用标准Python类型声明Body,这要归功于Pydatics

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

服务器应自动重新加载(因为您添加了--reload发送到uvicorn上述命令)

Interactive API文档升级

现在转到http://127.0.0.1:8000/docs

  • 交互API文档将自动更新,包括新的Body:

  • 点击[试用]按钮,即可填写参数,直接与接口交互:

  • 然后点击“执行”按钮,用户界面将与您的API进行通信,发送参数,得到结果并显示在屏幕上:

备用API文档升级

现在,请转到http://127.0.0.1:8000/redoc

  • 替代文档还将反映新的查询参数和正文:

概述

总而言之,您声明一次作为函数参数的参数类型、正文等

您可以使用标准的现代Python类型来实现这一点

您不必学习新语法、特定库的方法或类等

只是标准的Python 3.6+

例如,对于int

item_id: int

或者对于更复杂的Item型号:

item: Item

有了这一份声明,你就会得到:

  • 编辑器支持,包括:
    • 完成
    • 类型检查
  • 数据验证:
    • 数据无效时自动清除错误
    • 即使是针对深度嵌套的JSON对象的验证也是如此
  • 输入数据的转换:从网络到Python数据和类型的转换。阅读自:
    • JSON
    • 路径参数
    • 查询参数
    • 曲奇饼
    • 标题
    • 表格
    • 文件
  • 输出数据转换:从Python数据和类型转换为网络数据(如JSON):
    • 转换Python类型(strintfloatboollist等)
    • datetime对象
    • UUID对象
    • 数据库模型
    • 还有更多
  • 自动交互式API文档,包括2个替代用户界面:
    • 大摇大摆的UI
    • 复单

回到前面的代码示例,FastAPI将:

  • 验证是否存在item_id在用于的路径中GETPUT请求
  • 验证item_id类型为intGETPUT请求
    • 如果不是,客户端将看到一个有用的、明确的错误
  • 检查是否存在名为的可选查询参数q(如图所示http://127.0.0.1:8000/items/foo?q=somequery)用于GET请求
    • 作为q参数是用= None,它是可选的
    • 如果没有None这将是必需的(就像在具有以下情况的情况下的身体一样PUT)
  • PUT请求/items/{item_id},将正文读作JSON:
    • 检查它是否具有必需的属性name这应该是一个str
    • 检查它是否具有必需的属性price那一定是一个float
    • 检查它是否具有可选属性is_offer,那应该是一个bool,如果存在
    • 所有这些也适用于深度嵌套的JSON对象
  • 自动从JSON转换为JSON或自动转换为JSON
  • 使用OpenAPI记录可由以下人员使用的所有内容:
    • 交互式文档系统
    • 自动客户端代码生成系统,适用于多种语言
  • 直接提供2个交互式文档web界面

我们只是触及了皮毛,但您已经对它的工作原理有了大致的了解

尝试使用以下命令更改行:

    return {"item_name": item.name, "item_id": item_id}

出发地:

        ... "item_name": item.name ...

收件人:

        ... "item_price": item.price ...

并查看您的编辑器将如何自动完成属性并了解其类型:

有关包含更多功能的更完整示例,请参阅Tutorial – User Guide

剧透警报:教程-用户指南包括:

  • 的声明参数从其他不同的地方,如:标题曲奇饼表单域文件
  • 如何设置验证约束作为maximum_lengthregex
  • 一款功能非常强大且易于使用的依赖项注入系统
  • 安全性和身份验证,包括支持OAuth2使用JWT代币HTTP Basic身份验证
  • 更高级(但同样简单)的声明技术深度嵌套的JSON模型(多亏了皮丹蒂克)
  • 许多额外功能(感谢Starlette),如:
    • WebSockets
    • 图形QL
    • 极其简单的测试,基于requestspytest
    • CORS
    • Cookie会话
    • 还有更多

性能

独立TechEmpower基准显示FastAPI在Uvicorn AS下运行的应用程序one of the fastest Python frameworks available,仅低于Starlette和Uvicorn本身(由FastAPI内部使用)。(*)

要了解更多信息,请参阅小节Benchmarks

可选依赖项

由Pydtic使用:

由Starlette使用:

  • requests-如果要使用TestClient
  • aiofiles-如果要使用,则为必填项FileResponseStaticFiles
  • jinja2-如果要使用默认模板配置,则为必填项
  • python-multipart-如果您想支持表单“解析”,则为必填项,带有request.form()
  • itsdangerous-需要用于SessionMiddleware支持
  • pyyaml-Starlette的必填项SchemaGenerator支持(FastAPI可能不需要)
  • graphene-需要用于GraphQLApp支持
  • ujson-如果要使用,则为必填项UJSONResponse

由FastAPI/Starlette使用:

  • uvicorn-对于加载和服务您的应用程序的服务器
  • orjson-如果要使用,则为必填项ORJSONResponse

您可以使用以下命令安装所有这些组件pip install fastapi[all]

许可证

这个项目是根据麻省理工学院的许可条款授权的。

Core-🏡开源家庭自动化,将本地控制和隐私放在首位

家庭助理

开源家庭自动化,将本地控制和隐私放在首位。由世界各地的修补工人和DIY爱好者社区提供动力。非常适合在Raspberry PI或本地服务器上运行

检查home-assistant.ioa
demo
installation instructionstutorialsdocumentation

特色集成

该系统使用模块化方法构建,因此可以轻松实现对其他设备或操作的支持。另请参阅section on architecture以及section on creating your own
components

如果在使用Home Assistant或开发组件期间遇到问题,请检查Home Assistant help section有关更多帮助和信息,请访问我们的网站

Manim-用于解释数学视频的动画引擎







Manim是精确编程动画的引擎,设计用于创建解释性的数学视频

注意,Manim有两个版本。这个存储库最初是由3Blue1Brown用于制作这些视频的动画,并提供特定于视频的代码here在2020年,一群开发人员把它分成了现在的community edition,目标是更稳定,更好地测试,更快地响应社区贡献,并在开始时更加友好。看见this page有关更多详细信息,请参阅

安装

Manim在Python 3.6或更高版本上运行(建议使用Python 3.8)

系统要求有FFmpegOpenGLLaTeX(如果要使用LaTeX,则为可选)。对于Linux,Pango以及它的开发头都是必需的。请参阅说明here

Linux

# Install manimgl
pip install manimgl

# Try it out
manimgl

有关更多选项,请查看Using manim下面进一步说明的部分

如果您想要攻击manimlib本身,请克隆此存储库并在目录中执行:

# Install manimgl
pip install -e .

# Try it out
manimgl example_scenes.py OpeningManimExample
# or
manim-render example_scenes.py OpeningManimExample

Windows

  1. Install FFmpeg
  2. 安装LaTeX发行版。MiKTeX是推荐的
  3. 安装剩余的Python包
    git clone https://github.com/3b1b/manim.git
    cd manim
    pip install -e .
    manimgl example_scenes.py OpeningManimExample

Mac OSX

  1. 使用自制软件在终端中安装FFmpeg、LaTeX
    brew install ffmpeg mactex
  2. 使用以下命令安装最新版本的Manim
    git clone https://github.com/3b1b/manim.git
    cd manim
    pip install -e .
    manimgl example_scenes.py OpeningManimExample

虚拟环境安装

  1. 如上所述安装LaTeX
  2. 使用以下命令创建CONDA环境conda create -n manim python=3.8
  3. 使用激活环境conda activate manim
  4. 使用安装Manimglpip install -e .

使用Manim

尝试运行以下命令:

manimgl example_scenes.py OpeningManimExample

这应该会弹出一个播放简单场景的窗口

一些有用的标志包括:

  • -w将场景写入文件的步骤
  • -o将场景写入文件并打开结果的步骤
  • -s跳到末尾,只显示最后一帧
    • -so会将最终帧保存到图像并显示它
  • -n <number>要跳到前面的n‘场景的第8个动画
  • -f要使播放窗口全屏显示,请执行以下操作

有关进一步的配置,请查看customconfig.yml。要添加自定义,您可以编辑此文件,也可以将另一个同名文件“customconfig.yml”添加到运行Manim的任何目录中。例如this is the one为3Blue1Brown录像带。在那里,您可以指定视频应输出到的位置、Manim应在何处查找要读取的图像文件和声音,以及有关样式和视频质量的其他默认设置

翻看一下example scenes来了解它是如何使用的,并且可以随意查看其背后的代码3blue1brown videos来看一组更大的例子。然而,请注意,库的开发通常没有考虑与那些旧视频的向后兼容性。要运行旧项目并保证其工作正常,您必须返回到完成该项目的提交

文档

文档正在进行中,地址为3b1b.github.io/manim还有一个中文版本,由@manim-kindergartendocs.manim.org.cn(中文)

manim-kindergarten编写并收集了一些有用的额外类和一些视频代码manim_sandbox repo

贡献

总是受欢迎的。如上所述,community edition拥有最活跃的贡献生态系统,有测试和持续集成,但这里也欢迎拉入请求。请解释一个给定变化的动机和其影响的例子

许可证

这个项目属于麻省理工学院的许可范围。

Requests-一个简单而优雅的HTTP库

Requests

Requests是一个简单而优雅的HTTP库

>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
'{"type":"User"...'
>>> r.json()
{'disk_usage': 368627, 'private_gists': 484, ...}

请求允许您极其轻松地发送HTTP/1.1请求。不需要手动将查询字符串添加到URL,也不需要对PUT&POST数据-但现在,只需使用json方法!

Requests是目前下载量最大的Python包之一,14M downloads / week-根据GitHub的说法,请求目前正在depended upon通过500,000+存储库。您当然可以信任这段代码



安装请求和支持的版本

请访问PyPI上的Requests:

$ python -m pip install requests

Requests正式支持Python 2.7和3.6+

支持的功能和最佳做法

Requests已经为构建健壮可靠的HTTP语言应用程序的需求做好了准备,以满足当今的需求

  • 保活和连接池
  • 国际域名和URL
  • 具有Cookie持久性的会话
  • 浏览器样式的TLS/SSL验证
  • 基本和摘要身份验证
  • 熟悉dict-喜欢饼干
  • 自动内容解压缩和解码
  • 多部分文件上载
  • SOCKS代理支持
  • 连接超时
  • 流式下载
  • 自动兑现.netrc
  • 分块的HTTP请求

API参考和用户指南,请访问Read the Docs

克隆存储库

在克隆请求存储库时,您可能需要添加-c fetch.fsck.badTimezone=ignore用于避免有关错误提交的错误的标记(请参见this issue了解更多背景信息):

git clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git

您还可以将此设置应用于全局Git配置:

git config --global fetch.fsck.badTimezone ignore

Scikit-learn-SCRKIT-学习:Python中的机器学习



Scikit-learn 是构建在SciPy之上的用于机器学习的Python模块。

该项目由David Cournapeau于2007年作为Google Summer of Code项目启动,从那时起,许多志愿者都做出了贡献。请参阅About us获取核心贡献者列表的页面。

它目前由一支志愿者团队负责维护。

网站:https://scikit-learn.org

安装

依赖项

SCRICKIT-学习要求:

  • Python(>=3.7)
  • NumPy(>=1.14.6)
  • SciPy(>=1.1.0)
  • joblib(>=0.11)
  • threadpoolctl(>=2.0.0)

Scikit-Learn 0.20是支持Python 2.7和Python 3.4的最后一个版本SCRICKIT-学习0.23和更高版本需要Python3.6或更高版本。SCRICKIT-学习1.0和更高版本需要Python 3.7或更高版本

Scikit-了解绘图功能(即函数以plot_并且类以“display”结尾)需要Matplotlib(>=2.2.2)。要运行示例,需要Matplotlib>=2.2.2。少数示例需要SCRICKIT-image>=0.14.5,少数示例需要熊猫>=0.25.0,有些示例需要海运>=0.9.0

用户安装

如果您已经安装了能正常工作的Numpy和Scipy,则安装SCRICIT-LEARN的最简单方法是使用pip

pip install -U scikit-learn

conda

conda install -c conda-forge scikit-learn

该文档包括更详细的installation instructions

更改日志

请参阅changelog有关SCRICKIT显著变化的历史-了解

发展

我们欢迎所有经验水平的新贡献者。科学工具包学习社区的目标是帮助、欢迎和有效。这个Development Guide包含有关贡献代码、文档、测试等的详细信息。我们在本自述中包含了一些基本信息

重要链接

源代码

您可以使用以下命令查看最新的源代码:

git clone https://github.com/scikit-learn/scikit-learn.git

贡献

要了解更多关于为SCRICKIT-LEARN做出贡献的信息,请参阅我们的Contributing guide

测试

安装之后,您可以从源目录外部启动测试套件(您将需要pytest>=5.0.1已安装):

pytest sklearn

请参阅网页https://scikit-learn.org/dev/developers/advanced_installation.html#testing了解更多信息

随机数生成可以在测试期间通过设置SKLEARN_SEED环境变量

提交拉取请求

在打开拉取请求之前,请查看完整的贡献页面,以确保您的代码符合我们的指导原则:https://scikit-learn.org/stable/developers/index.html

项目历史记录

该项目由David Cournapeau于2007年作为Google Summer of Code项目启动,从那时起,许多志愿者都做出了贡献。请参阅About us获取核心贡献者列表的页面

该项目目前由一组志愿者负责维护。

注意事项:SCRICIT-LEARN以前被称为SCRICKIT。

帮助和支持

文档

沟通

引文

如果您在科学出版物中使用SCRICKIT-LEARN,我们将非常感谢您的引用:https://scikit-learn.org/stable/about.html#citing-scikit-learn

Ansible 一个极其简单的IT自动化平台

基本介绍

Ansible是一个非常简单的IT自动化系统。它处理配置管理、应用部署、云调配、临时任务执行、网络自动化和多节点协调。Ansible使使用负载均衡器进行零宕机滚动更新等复杂更改变得容易。关于Ansible的更多信息: website

设计原则

  • 设置过程极其简单,学习曲线最短
  • 快速、并行地管理计算机
  • 避免自定义代理和其他开放端口,通过利用现有SSH守护进程实现无代理
  • 用对机器和人都友好的语言描述基础架构
  • 重点关注内容的安全性和易审核性/审阅/重写
  • 即时管理新的远程计算机,无需引导任何软件
  • 允许使用任何动态语言进行模块开发,而不仅仅是Python
  • 可作为非根用户使用
  • 成为有史以来最易于使用的IT自动化系统

使用Ansible

您可以使用安装Ansible的发布版本pip或者是包裹管理员。请参阅我们的installation guide有关在各种平台上安装Ansible的详细信息

Red Hat提供受支持的Ansible Engine

高级用户和开发人员可以运行devel分支,它具有最新的功能和修复,直接。虽然它相当稳定,但在运行时更有可能遇到破坏性更改。devel布兰奇。我们建议您参与Ansible社区,如果您想要运行devel分支机构

参与进来吧

  • 朗读Community
    Information
    以各种方式为项目做出贡献并与之交互,包括邮件列表信息以及如何向Ansible提交错误报告和代码
  • 加入Working Group,一个致力于特定技术领域或平台的有组织的社区
  • 通过拉入请求将建议的代码更新提交给devel分支机构
  • 在进行更大规模的更改之前,请与我们联系,以避免重复工作。这不仅帮助每个人了解正在发生的事情,而且如果我们决定需要进行一些更改,它还有助于节省时间和精力
  • 有关电子邮件列表、IRC频道和工作组的列表,请参阅Communication page

编码指南

我们将我们的编码指南记录在Developer Guide我们特别建议您回顾一下:

分支机构信息

  • 这个devel分支对应于正在积极开发的版本
  • 这个stable-2.X分支对应于稳定版本
  • 根据以下内容创建分支devel并设置一个dev environment如果您想要打开公关
  • 请参阅Ansible release and maintenance有关活动分支机构的信息,请参见页面

路线图

根据团队和社区的反馈,将发布主要或次要版本(例如:2.7、2.8)的初始路线图。这个Ansible Roadmap page详细说明计划的内容以及如何影响路线图

作者

Ansible是由Michael DeHaan并拥有超过5000名用户的贡献(而且还在不断增加)。谢谢大家!

Ansible赞助商是Red Hat, Inc.

许可证

GNU通用公共许可证v3.0或更高版本

看见COPYING要查看全文,请执行以下操作

Pytorch-强GPU加速的Python中的张量和动态神经网络

PyTorch是一个Python软件包,提供了两个高级功能。

张量计算(如NumPy),具有强大的GPU加速能力,建立在基于磁带的autograd系统上的深度神经网络,在需要的时候,你可以重复使用你最喜欢的Python包,如NumPy、SciPy和Cython,来扩展PyTorch。

系统 3.6 3.7 3.8
Linux CPU
Linux GPU
Windows CPU/GPU
Linux(Ppc64le)CPU
Linux(Ppc64le)GPU
Linux(Aarch64)CPU

另请参阅ci.pytorch.org HUD

更多关于PyTorch的信息

在粒度级别上,PyTorch是一个由以下组件组成的库:

组件 描述
火炬 像NumPy这样的张量器库,具有强大的GPU支持
torch.autograd 基于磁带的自动区分库,支持TORCH中的所有可微分张量操作
torch.jit 从PyTorch代码创建可序列化和可优化模型的编译堆栈(TorchScript)
torch.nn 与Autograd深度集成的神经网络库,旨在实现最大的灵活性
torch.multiprocessing Python多处理,但具有跨进程共享火炬张量的神奇内存。适用于数据加载和HogWild培训
torch.utils 为方便起见,DataLoader和其他实用程序功能

通常,PyTorch用作以下任一用途:

  • 替代NumPy使用GPU的功能
  • 提供最大灵活性和速度的深度学习研究平台

进一步阐述:

一种支持GPU的张量库

如果您使用NumPy,则您使用的是张量(也称为(Ndarray)

PyTorch提供的张量既可以在CPU上运行,也可以在GPU上运行,从而将计算速度大幅提高

我们提供各种各样的张量例程来加速和满足您的科学计算需求,例如切片、索引、数学运算、线性代数、约简。而且他们跑得很快!

动态神经网络:基于磁带的自动评分

PyTorch有一种构建神经网络的独特方式:使用和重放磁带录音机

大多数框架,如TensorFlow、Theano、Caffe和CNTK都有静电的世界观。人们必须建立一个神经网络,并一次又一次地重复使用相同的结构。改变网络的行为方式意味着必须从头开始

对于PyTorch,我们使用一种称为反向模式自动区分的技术,该技术允许您在没有延迟或开销的情况下任意更改网络的行为方式。我们的灵感来自于几篇关于这一主题的研究论文,以及目前和过去的工作,如手电筒-自动分级自动评分链条

虽然这种技术不是PyTorch独有的,但它是迄今为止最快的实现之一。你在疯狂的研究中获得了最快的速度和最好的灵活性

Python优先

PyTorch不是到单一C++框架的Python绑定。它是为深度集成到Python而构建的。你可以像以前一样自然地使用它NumPy/科学Py/科学工具包-学习等。您可以用Python本身编写新的神经网络层,使用您喜欢的库并使用包,如CythonNumba我们的目标是不在适当的地方重新发明轮子。

势在必行的经验

PyTorch被设计为直观、线性的思想,并且易于使用。当您执行一行代码时,它就会被执行。没有异步的世界观。当您进入调试器或接收错误消息和堆栈跟踪时,理解它们很简单。堆栈跟踪准确地指向定义代码的位置。我们希望您永远不要因为错误的堆栈跟踪或异步且不透明的执行引擎而花费数小时调试您的代码

快速精益

PyTorch的框架开销最小。我们集成了加速库,如英特尔MKL和NVIDIA(CuDNNNCCL)以最大限度地提高速度。在核心上,其CPU和GPU张量以及神经网络后端(TH、THC、THNN、THCUNN)已经成熟,并且经过多年的测试

因此,PyTorch是相当快的-无论您运行的是小型神经网络还是大型神经网络

与Torch或某些替代方案相比,PyTorch中的内存使用效率非常高。我们已经为GPU编写了自定义内存分配器,以确保您的深度学习模型具有最高的内存效率。这使您能够训练比以前更大的深度学习模型

无痛延长

编写新的神经网络模块,或者与PyTorch的张量API接口,设计得简单明了,抽象最少

您可以使用Torch API在Python中编写新的神经网络图层或者您最喜欢的基于NumPy的库,如SciPy

如果您想用C/C++编写您的层,我们提供了一个方便的扩展API,它是高效的,并且具有最少的样板。不需要编写包装器代码。你可以看到此处提供教程这里有一个例子

安装

二进制文件

通过conda或pip轮从二进制文件安装的命令在我们的网站上提供:https://pytorch.org

NVIDIA Jetson平台

NVIDIA的Jetson Nano、Jetson TX2和Jetson AGX Xavier的Python轮可通过以下URL获得:

它们需要JetPack 4.2和更高版本,以及@达斯蒂-内华达州维护它们

来自源

如果从源代码安装,则需要Python 3.6.2或更高版本和C++14编译器。此外,我们强烈建议您安装蟒蛇环境。您将获得一个高质量的BLAS库(MKL),并且无论您的Linux发行版是什么,您都可以获得受控的依赖项版本

一旦你有了蟒蛇已安装,以下是说明

如果要使用CUDA支持进行编译,请安装

如果要禁用CUDA支持,请导出环境变量USE_CUDA=0其他可能有用的环境变量可以在setup.py

如果您正在为NVIDIA的Jetson平台(Jetson Nano、TX1、TX2、AGX Xavier)构建,请参阅以下安装PyTorch for Jetson Nano的说明此处提供

如果要使用ROCM支持进行编译,请安装

  • AMD ROCM4.0及更高版本的安装
  • ROCM目前仅支持Linux系统

如果要禁用ROCM支持,请导出环境变量USE_ROCM=0其他可能有用的环境变量可以在setup.py

安装依赖项

常见

conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses

在Linux上

# CUDA only: Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda110  # or the magma-cuda* that matches your CUDA version from https://anaconda.org/pytorch/repo

在MacOS上

# Add these packages if torch.distributed is needed
conda install pkg-config libuv

在Windows上

# Add these packages if torch.distributed is needed.
# Distributed package support on Windows is a prototype feature and is subject to changes.
conda install -c conda-forge libuv=1.39

获取PyTorch源代码

git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive --jobs 0

安装PyTorch

在Linux上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py install

请注意,如果您正在为ROCM编译,则必须首先运行此命令:

python tools/amd_build/build_amd.py

请注意,如果您使用的是Python,您可能会遇到链接器导致的错误:

build/temp.linux-x86_64-3.7/torch/csrc/stub.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
error: command 'g++' failed with exit status 1

这是由以下原因引起的ld从Conda环境跟踪系统ld您应该使用较新版本的Python来修复此问题。推荐的Python版本为3.6.10+、3.7.6+和3.8.1+

在MacOS上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install

每个CUDA版本仅支持一个特定的XCode版本。据报道,以下组合可与PyTorch配合使用

CUDA版 Xcode版本
10.0 Xcode 9.4
10.1 Xcode 10.1

在Windows上

选择正确的Visual Studio版本

在Visual Studio的新版本中有时会出现回归,因此最好使用相同的Visual Studio版本16.8.5作为Pytorch CI。虽然PyTorch CI使用Visual Studio BuildTools,但您可以使用Visual Studio Enterprise、Professional或Community

如果您想构建遗留的python代码,请参阅在遗留代码和CUDA的基础上构建

使用CPU构建

使用CPU构建相当容易

有关OpenMP的说明:所需的OpenMP实施是英特尔OpenMP(IOMP)。为了链接到iomp,您需要手动下载库并通过调整设置构建环境CMAKE_INCLUDE_PATHLIB该说明这里是设置MKL和英特尔OpenMP的示例。如果没有这些CMake配置,将使用Microsoft Visual C OpenMP运行时(vcomp

使用CUDA构建

NVTX是使用CUDA构建Pytorch所必需的。NVTX是CUDA分布式的一部分,被称为“NSight Compute”。要将其安装到已安装的CUDA上,请再次运行CUDA安装并选中相应的复选框。确保在Visual Studio之后安装带Night Compute的CUDA

目前支持VS 2017/2019,支持忍者作为CMake的生成器。如果ninja.exe在以下位置检测到PATH,则使用忍者作为默认生成器,否则将使用VS 2017/2019
如果选择忍者作为生成器,则会选择最新的MSVC作为底层工具链

其他库,如岩浆oneDNN,也称为MKLDNN或DNNL,以及Sccache是经常需要的。请参阅安装帮助器要安装它们,请执行以下操作

您可以参考build_pytorch.bat其他一些环境变量配置的脚本

cmd

:: [Optional] If you want to build with the VS 2017 generator for old CUDA and PyTorch, please change the value in the next line to `Visual Studio 15 2017`.
:: Note: This value is useless if Ninja is detected. However, you can force that by using `set USE_NINJA=OFF`.
set CMAKE_GENERATOR=Visual Studio 16 2019

:: Read the content in the previous section carefully before you proceed.
:: [Optional] If you want to override the underlying toolset used by Ninja and Visual Studio with CUDA, please run the following script block.
:: "Visual Studio 2019 Developer Command Prompt" will be run automatically.
:: Make sure you have CMake >= 3.12 before you do this when you use the Visual Studio generator.
set CMAKE_GENERATOR_TOOLSET_VERSION=14.27
set DISTUTILS_USE_SDK=1
for /f "usebackq tokens=*" %i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -version [15^,16^) -products * -latest -property installationPath`) do call "%i\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%

:: [Optional] If you want to override the CUDA host compiler
set CUDAHOSTCXX=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX64\x64\cl.exe

python setup.py install
调整生成选项(可选)

您可以通过执行以下操作来调整cmake变量的配置(无需首先构建)。例如,可以通过这样的步骤来调整CuDNN或BLAS的预先检测的目录

在Linux上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py build --cmake-only
ccmake build  # or cmake-gui build

在MacOS上

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py build --cmake-only
ccmake build  # or cmake-gui build

Docker镜像

使用预构建映像

您还可以从Docker Hub获取预构建的坞站映像,并使用Docker v19.03+运行

docker run --gpus all --rm -ti --ipc=host pytorch/pytorch:latest

请注意,PyTorch使用共享内存在进程之间共享数据,因此如果使用Torch多处理(例如,对于多线程数据加载器),运行容器的默认共享内存段大小是不够的,您应该使用以下两种方法之一来增加共享内存大小--ipc=host--shm-size命令行选项用于nvidia-docker run

自己打造形象

注:必须使用18.06以上的坞站版本构建

这个Dockerfile用于构建支持CUDA 11.1和cuDNN V8的映像。你可以通过PYTHON_VERSION=x.yMake Variable指定Miniconda要使用的Python版本,或将其保留为未设置为使用默认版本

make -f docker.Makefile
# images are tagged as docker.io/${your_docker_username}/pytorch

构建文档

要构建各种格式的文档,您需要狮身人面像以及阅读文档的主题

cd docs/
pip install -r requirements.txt

然后,您可以通过运行以下命令来生成文档make <format>docs/文件夹。跑make要获取所有可用输出格式的列表,请执行以下操作

如果运行Katex错误npm install katex如果它持续存在,请尝试npm install -g katex

以前的版本

早期PyTorch版本的安装说明和二进制文件可在以下位置找到我们的网站

快速入门

帮助您入门的三点建议:

资源

沟通

发布和贡献

PyTorch有90天的发布周期(主要版本)。如果您通过以下方式遇到错误,请通知我们提交问题

我们感谢所有的贡献。如果您计划回馈错误修复,请在不做任何进一步讨论的情况下这样做

如果您计划为核心贡献新的功能、实用程序功能或扩展,请先打开一个问题并与我们讨论该功能。未经讨论发送PR可能最终导致拒绝PR,因为我们可能会将核心带到与您可能意识到的方向不同的方向

要了解更多关于为Pytorch做出贡献的信息,请参阅我们的投稿页面

团队

PyTorch是一个社区驱动的项目,有几个熟练的工程师和研究人员参与其中

PyTorch目前由亚当·帕兹克萨姆·格罗斯苏史密斯·钦塔拉格雷戈里·查南(Gregory Chanan)主要贡献来自于数以百计的各种形式和手段的人才。值得一提的是:特雷弗·基林(Trevor Killeen)、萨桑克·奇拉姆库尔蒂(Sasank Chilamkurthy)、谢尔盖·扎戈鲁伊科(Sergey Zagoruyko)、亚当·莱勒(Adam Lerer)、弗朗西斯科·马萨(Francisco Massa)、阿利汗·特贾尼(Alykhan Tejani)、卢卡·安提加(Luca Antiga)、阿尔班·德斯迈森(Alban Desmaison)、安德烈亚斯·科普夫(Andreas Koepf)、詹姆斯·布拉德伯里(James Bradbury)、林泽明、田远东、纪尧姆·兰普尔(Guillaume Lample

注:此项目与哈伯金/火炬同名同姓。休是Torch社区的一位有价值的贡献者,并在Torch和PyTorch的许多事情上提供了帮助

许可证

PyTorch具有BSD样式的许可证,可以在许可证

Keras-人类的深度学习

Keras: Deep Learning for humans

此存储库托管Kera库的开发。阅读keras.io上的文档

关于Keras

KERAS是一个用Python编写的深度学习API,运行在机器学习平台TensorFlow之上。它的开发重点是实现快速实验。能够尽快从想法转化为结果是做好研究的关键。

Keras特点是:

  • Simple
  • Flexible
  • Powerful

Kera&TensorFlow 2

TensorFlow 2是一个端到端的开源机器学习平台。您可以将其视为可区分编程的基础架构层。它结合了四项关键功能:

  • Efficiently executing low-level tensor operations on CPU, GPU, or TPU.
  • Computing the gradient of arbitrary differentiable expressions.
  • Scaling computation to many devices, such as clusters of hundreds of GPUs.
  • Exporting programs (“graphs”) to external runtimes such as servers, browsers, mobile and embedded devices.

KERAS是TensorFlow 2的高级API:TensorFlow 2是一个平易近人、高效的界面,用于解决机器学习问题,重点是现代深度学习。它为开发和发布高迭代速度的机器学习解决方案提供了必要的抽象和构建块

Kera使工程师和研究人员能够充分利用TensorFlow 2的可扩展性和跨平台功能:您可以在TPU或大型GPU群集上运行Kera,还可以导出Kera模型以在浏览器或移动设备上运行


与Keras的第一次接触

KERAS的核心数据结构是层和模型。最简单的模型类型是顺序模型,即层的线性堆栈。对于更复杂的体系结构,您应该使用Kera Functional API,它允许构建任意的层图,或者通过子类化完全从头开始编写模型

以下是顺序模型:

from tensorflow.keras.models import Sequential

model = Sequential()

堆叠层与.add()一样简单:

from tensorflow.keras.layers import Dense

model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=10, activation='softmax'))

一旦您的模型看起来不错,就可以使用.Compile()配置其学习过程:

model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

如果需要,您可以进一步配置优化器。KERAS的理念是让简单的事情变得简单,同时允许用户在需要的时候完全控制(最终的控制是通过子类化实现源代码的轻松可扩展性)

model.compile(loss=tf.keras.losses.categorical_crossentropy,
              optimizer=tf.keras.optimizers.SGD(
                  learning_rate=0.01, momentum=0.9, nesterov=True))

现在,您可以批量迭代您的培训数据:

# x_train and y_train are Numpy arrays.
model.fit(x_train, y_train, epochs=5, batch_size=32)

在一行中评估您的测试损失和指标:

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

或对新数据生成预测:

classes = model.predict(x_test, batch_size=128)

您刚才看到的是使用KERAS的最基本的方式

然而,KERAS也是一个高度灵活的框架,适合重复最先进的研究思想。KERAS遵循逐步披露复杂性的原则:它使入门变得容易,但它使处理任意高级用例成为可能,每一步只需要增量学习

就像您可以用几行代码训练和评估上面的简单神经网络一样,您可以使用KERAS快速开发新的训练过程或奇异的模型体系结构。以下是一个低级培训循环示例,将KERAS功能与TensorFlow GradientTape相结合:

import tensorflow as tf

# Prepare an optimizer.
optimizer = tf.keras.optimizers.Adam()
# Prepare a loss function.
loss_fn = tf.keras.losses.kl_divergence

# Iterate over the batches of a dataset.
for inputs, targets in dataset:
    # Open a GradientTape.
    with tf.GradientTape() as tape:
        # Forward pass.
        predictions = model(inputs)
        # Compute the loss value for this batch.
        loss_value = loss_fn(targets, predictions)

    # Get gradients of loss wrt the weights.
    gradients = tape.gradient(loss_value, model.trainable_weights)
    # Update the weights of the model.
    optimizer.apply_gradients(zip(gradients, model.trainable_weights))

有关KERAS的更多深入教程,您可以查看:


安装

Kera与TensorFlow2一起打包为tensorflow.keras。要开始使用Kera,只需安装TensorFlow 2


支持

您可以提问并加入发展讨论:

您还可以在GitHub问题中发布错误报告和功能请求(仅限)

Project-based-learning-基于项目的教程的精选列表

Project Based Learning

编程教程列表,学员可以在这些教程中从头开始构建应用程序。这些教程分为不同的主要编程语言。有些拥有混合的技术和语言

要开始,只需fork此仓库即可。有关投稿指南,请参阅CONTRIBUTING.md

目录:

C/C++:

网络编程

OpenGL:

C#:

闭合:

灵丹妙药

二郎

F编号:

Java:

JavaScript:

HTML和CSS:

移动应用:

Web应用程序:

节点:

VUE

其他(Hapi,Express.):

D3.js

Others (Hapi, Express…):

D3.js

游戏开发:

桌面应用程序:

其他:

科特林:

Lua:

L?VE:

巨蟒:

网络抓取:

机器人:

数据科学:

机器学习:

OpenCV:

深度学习:

Ruby on Rails:

反应:

开始:

PHP:

OCaml:

红宝石:

角度:

哈斯克尔:

R:

Rust:

Scala:

Swift:

其他资源

Flask-用于构建Web应用程序的Python微框架

Flask

Flask是一个轻量级的WSGI Web应用程序框架。它旨在使入门变得快速而简单,并且能够向上扩展到复杂的应用程序。它最初只是Werkzeug和JJJA_的一个简单包装器,现在已经成为最流行的Python Web应用程序框架之一

Fask提供建议,但不强制执行任何依赖项或项目布局。由开发人员选择他们想要使用的工具和库。社区提供了许多扩展,使添加新功能变得容易

 

一个简单的例子

使用pip_安装和更新:

$ pip install -U Flask

_PIP:https://pip.pypa.io/en/stable/quickstart/

贡献

代码-挡路::蟒蛇

# save this as app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

有关设置开发环境以及如何为Flask做出贡献的指导,请参阅贡献指南_

$ flask run
  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

捐赠

_投稿指南:https://github.com/pallets/flask/blob/main/CONTRIBUTING.rst

托盘组织开发并支持Flask及其使用的库。为了扩大贡献者和用户的社区,让维护人员有更多的时间在项目上投入更多的时间,请今天就捐款。

链接

  • Documentation: https://flask.palletsprojects.com/
  • Changes: https://flask.palletsprojects.com/changes/
  • PyPI Releases: https://pypi.org/project/Flask/
  • Source Code: https://github.com/pallets/flask/
  • Issue Tracker: https://github.com/pallets/flask/issues/
  • Website: https://palletsprojects.com/p/flask/
  • Twitter: https://twitter.com/PalletsTeam
  • Chat: https://discord.gg/pallets

有趣好用的Python教程

退出移动版
微信支付
请使用 微信 扫码支付