标签归档:artificial-intelligence

Pytorch-lightning-用于高性能人工智能研究的轻量级PyTorch包装器

Lightning设计理念

Lightning使用以下原则构建PyTorch代码:

Lightning强制您的代码采用以下结构,从而使其可重用和可共享:

  • 研究代码(LightningModule)
  • 工程代码(您删除,并由培训师处理)
  • 非必要的研究代码(日志记录等,这在回调中使用)
  • 数据(使用PyTorch DataLoaders或将其组织到LightningDataModule中)

一旦这样做了,您就可以在多GPU、TPU、CPU上进行培训,甚至可以在不更改代码的情况下进行16位精度的培训!

开始使用我们的2 step guide


持续集成

Lightning在多个GPU、TPU CPU上进行了严格的测试,并针对主要的Python和PyTorch版本进行了测试

当前生成状态
系统/火炬版本 1.4(最低请求。) 1.5 1.6 1.7 1.8(LTS) 1.9(最新)
Conda py3.7[Linux]
Linux py3.7[GPU**]
Linux py3.{6,7}[TPU*]
Linux py3.{6,7,8,9}
OSX py3.{6,7,8,9}
Windows py3.{6,7,8,9}
  • **测试在两个NVIDIA P100上运行
  • *测试在Google GKE TPUv2/3上运行
  • TPU py3.7意味着我们支持Colab和Kaggle环境

如何使用

步骤0:安装

从PyPI轻松安装

pip install pytorch-lightning
其他安装选项

使用可选依赖项安装

pip install pytorch-lightning['extra']

孔达

conda install pytorch-lightning -c conda-forge

安装稳定版1.3.x

1.3[稳定]的实际状态如下:





从源安装未来版本

pip install git+https://github.com/PytorchLightning/pytorch-lightning.git@release/1.3.x --upgrade

安装尖端技术-未来1.4

夜间从源安装(不保证)

pip install https://github.com/PyTorchLightning/pytorch-lightning/archive/master.zip

或通过测试PyPI

pip install -iU https://test.pypi.org/simple/ pytorch-lightning

步骤1:添加这些导入

import os
import torch
from torch import nn
import torch.nn.functional as F
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader, random_split
from torchvision import transforms
import pytorch_lightning as pl

步骤2:定义LightningModule(nn.Module子类)

LightningModule定义完整的系统(即:GAN、自动编码器、BERT或简单图像分类器)

class LitAutoEncoder(pl.LightningModule):

    def __init__(self):
        super().__init__()
        self.encoder = nn.Sequential(nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 3))
        self.decoder = nn.Sequential(nn.Linear(3, 128), nn.ReLU(), nn.Linear(128, 28 * 28))

    def forward(self, x):
        # in lightning, forward defines the prediction/inference actions
        embedding = self.encoder(x)
        return embedding

    def training_step(self, batch, batch_idx):
        # training_step defines the train loop. It is independent of forward
        x, y = batch
        x = x.view(x.size(0), -1)
        z = self.encoder(x)
        x_hat = self.decoder(z)
        loss = F.mse_loss(x_hat, x)
        self.log('train_loss', loss)
        return loss

    def configure_optimizers(self):
        optimizer = torch.optim.Adam(self.parameters(), lr=1e-3)
        return optimizer

注:Training_Step定义训练循环。转发定义了LightningModule在推理/预测期间的行为方式

第三步:训练!

dataset = MNIST(os.getcwd(), download=True, transform=transforms.ToTensor())
train, val = random_split(dataset, [55000, 5000])

autoencoder = LitAutoEncoder()
trainer = pl.Trainer()
trainer.fit(autoencoder, DataLoader(train), DataLoader(val))

高级功能

闪电已经过去了40+ advanced features专为专业的大规模人工智能研究而设计

以下是一些示例:

突出显示的功能代码片段
# 8 GPUs
# no code changes needed
trainer = Trainer(max_epochs=1, gpus=8)

# 256 GPUs
trainer = Trainer(max_epochs=1, gpus=8, num_nodes=32)
在不更改代码的TPU上进行培训
# no code changes needed
trainer = Trainer(tpu_cores=8)
16位精度
# no code changes needed
trainer = Trainer(precision=16)
实验管理员
from pytorch_lightning import loggers

# tensorboard
trainer = Trainer(logger=TensorBoardLogger('logs/'))

# weights and biases
trainer = Trainer(logger=loggers.WandbLogger())

# comet
trainer = Trainer(logger=loggers.CometLogger())

# mlflow
trainer = Trainer(logger=loggers.MLFlowLogger())

# neptune
trainer = Trainer(logger=loggers.NeptuneLogger())

# ... and dozens more
提前停止
es = EarlyStopping(monitor='val_loss')
trainer = Trainer(callbacks=[es])
检查点设置
checkpointing = ModelCheckpoint(monitor='val_loss')
trainer = Trainer(callbacks=[checkpointing])
导出为Torchscript(JIT)(生产用途)
# torchscript
autoencoder = LitAutoEncoder()
torch.jit.save(autoencoder.to_torchscript(), "model.pt")
导出到ONNX(生产用途)
# onnx
with tempfile.NamedTemporaryFile(suffix='.onnx', delete=False) as tmpfile:
    autoencoder = LitAutoEncoder()
    input_sample = torch.randn((1, 64))
    autoencoder.to_onnx(tmpfile.name, input_sample, export_params=True)
    os.path.isfile(tmpfile.name)

培训回路的高级控制(高级用户)

对于复杂/专业级别的工作,您可以选择完全控制培训循环和优化器

class LitAutoEncoder(pl.LightningModule):
    def __init__(self):
        super().__init__()
        self.automatic_optimization = False

    def training_step(self, batch, batch_idx):
        # access your optimizers with use_pl_optimizer=False. Default is True
        opt_a, opt_b = self.optimizers(use_pl_optimizer=True)

        loss_a = ...
        self.manual_backward(loss_a, opt_a)
        opt_a.step()
        opt_a.zero_grad()

        loss_b = ...
        self.manual_backward(loss_b, opt_b, retain_graph=True)
        self.manual_backward(loss_b, opt_b)
        opt_b.step()
        opt_b.zero_grad()

相对于非结构化PyTorch的优势

  • 型号变得与硬件无关
  • 代码清晰易读,因为工程代码是抽象出来的
  • 更容易复制
  • 犯的错误更少,因为闪电处理了棘手的工程
  • 保持所有的灵活性(LightningModules仍然是PyTorch模块),但删除了大量的样板文件
  • Lightning与流行的机器学习工具进行了数十次集成
  • Tested rigorously with every new PR我们测试PyTorch和Python支持的版本、每个操作系统、多个GPU甚至TPU的每种组合
  • 最小运行速度开销(与纯PyTorch相比,每历元约300毫秒)

示例

你好,世界
对比学习
NLP
强化学习
愿景
经典ML

社区

闪电社区由

  • 10+ core contributors他们都是来自顶尖人工智能实验室的专业工程师、研究科学家和博士生的混合体
  • 480+活跃的社区贡献者

想要帮助我们构建Lightning并为数千名研究人员减少样板吗?Learn how to make your first contribution here

闪电也是PyTorch ecosystem这要求项目有可靠的测试、文档和支持

寻求帮助

如果您有任何问题,请:

  1. Read the docs
  2. Search through existing Discussions,或add a new question
  3. Join our slack

资金来源

We’re venture funded为确保我们能够提供全天候支持,请聘请全职员工,参加会议,并通过实施您要求的功能加快行动速度


网格AI

网格AI是我们在云上大规模训练模型的平台!

注册我们的免费社区层here

要使用GRID,请使用您的常规命令:

python my_model.py --learning_rate 1e-6 --layers 2 --gpus 4

并将其更改为使用GRID TRAIN命令:

grid train --grid_gpus 4 my_model.py --learning_rate 'uniform(1e-6, 1e-1, 20)' --layers '[2, 4, 8, 16]'

上面的命令将启动(20*4)个实验,每个实验在4个GPU(320个GPU!)上运行-不对代码进行任何更改


牌照

请遵守此存储库中列出的Apache 2.0许可证。此外,Lightning框架正在申请专利

BibTeX

如果您想引用该框架,请随意使用(但只有在您喜欢它的情况下😊)或zenodo

@article{falcon2019pytorch,
  title={PyTorch Lightning},
  author={Falcon, WA, et al.},
  journal={GitHub. Note: https://github.com/PyTorchLightning/pytorch-lightning},
  volume={3},
  year={2019}
}

SpaCy-基于Python语言的💫工业级自然语言处理

Spacy:工业实力NLP

Spacy是一个图书馆,用于高级自然语言处理在Python和Cython中。它建立在最新的研究基础上,从第一天起就被设计用于真正的产品中

Spacy伴随着pretrained pipelines,并且当前支持标记化和培训60多种语言它的特点是最先进的速度和神经网络模型用于标记、解析命名实体识别文本分类更重要的是,通过预先培训实现多任务学习变形金刚像伯特一样,也是一个随时准备生产的training system以及轻松的模型打包、部署和工作流管理。Spacy是在麻省理工学院许可下发布的商业开源软件

💫现在发布3.0版!
Check out the release notes here.

📖文档

文档
⭐️spaCy 101 对Spacy来说是新手吗?这是你需要知道的一切!
📚Usage Guides 如何使用Spacy及其功能
🚀New in v3.0 新功能、向后不兼容性和迁移指南
🪐Project Templates 您可以克隆、修改和运行端到端工作流
🎛API Reference Spacy的API的详细参考资料
📦Models 为Spacy下载经过培训的管道
🌌Universe 来自Spacy生态系统的插件、扩展、演示和书籍
👩‍🏫Online Course 在这个免费的交互式在线课程中学习Spacy
📺Videos 我们的YouTube频道提供视频教程、讲座等
🛠Changelog 更改和版本历史记录
💝Contribute 如何为Spacy项目和代码库做出贡献

💬在哪里提问?

Spacy项目由@honnibal@ines@svlandeg@adrianeboyd@polm请理解,我们将不能通过电子邮件提供个人支持。我们还相信,如果帮助被公开分享,那么它就更有价值,这样更多的人就可以从中受益

类型 站台
🚨错误报告 GitHub Issue Tracker
🎁功能要求和想法 GitHub Discussions
👩‍💻使用问题 GitHub Discussions·Stack Overflow
🗯一般性讨论 GitHub Discussions

功能

  • 支持60多种语言
  • 训练有素的管道对于不同的语言和任务
  • 带预训练的多任务学习变形金刚像伯特一样
  • 对预训人员的支持词向量和嵌入
  • 最先进的速度
  • 生产准备就绪培训系统
  • 语言动机标记化
  • 命名的组件实体识别词性标注、依存关系分析、句子切分文本分类、词汇化、词法分析、实体链接等
  • 通过以下功能轻松扩展自定义组件和属性
  • 支持中的自定义模型PyTorchTensorFlow和其他框架
  • 内置可视化工具对于语法和NER
  • 简单易懂模型包装、部署和工作流管理
  • 稳健、经过严格评估的准确性

📖有关更多详细信息,请参阅facts, figures and benchmarks

⏳安装空间

有关详细的安装说明,请参阅documentation

  • 操作系统:MacOS/OS X·Linux·Windows(Cygwin、MinGW、Visual Studio)
  • Python版本:Python 3.6+(仅64位)
  • 包管理器pip·conda(通过conda-forge)

管道

使用pip,spacy发行版以源码包和二进制轮子的形式可用。在安装Spacy及其依赖项之前,请确保您的pipsetuptoolswheel是最新的

pip install -U pip setuptools wheel
pip install spacy

要安装额外的数据表以进行列举化和规范化,可以运行pip install spacy[lookups]或安装spacy-lookups-data分开的。使用列举化数据创建空白模型需要使用查找包,并需要使用尚未附带预先训练的模型和第三方库支持的语言进行词汇化

使用pip时,一般建议在虚拟环境中安装包,避免修改系统状态:

python -m venv .env
source .env/bin/activate
pip install -U pip setuptools wheel
pip install spacy

孔达

您也可以从安装Spacyconda通过conda-forge频道。有关原料(包括构建配方和配置),请查看this repository

conda install -c conda-forge spacy

更新空间

Spacy的一些更新可能需要下载新的统计模型。如果您运行的是spacy v2.0或更高版本,则可以使用validate命令检查您安装的型号是否兼容,如果不兼容,则打印有关如何更新它们的详细信息:

pip install -U spacy
python -m spacy validate

如果您训练过自己的模型,请记住您的训练和运行时输入必须匹配。更新Spacy后,我们建议重新培训您的模型使用新版本

📖有关从spacy 2.x升级到spacy 3.x的详细信息,请参阅migration guide

📦下载模型包

经过培训的空间管道可以安装为Python包这意味着它们是应用程序的一个组件,就像任何其他模块一样。可以使用Spacy的安装模型download命令,或通过将pip指向路径或URL手动执行

文档
Available Pipelines 详细的管道描述、精度数字和基准
Models Documentation 详细的使用和安装说明
Training 如何根据您的数据培训您自己的管道
# Download best-matching version of specific model for your spaCy installation
python -m spacy download en_core_web_sm

# pip install .tar.gz archive or .whl from path or URL
pip install /Users/you/en_core_web_sm-3.0.0.tar.gz
pip install /Users/you/en_core_web_sm-3.0.0-py3-none-any.whl
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.0.0/en_core_web_sm-3.0.0.tar.gz

加载和使用模型

要加载模型,请使用spacy.load()使用模型名称或模型数据目录的路径

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a sentence.")

您还可以import直接通过其全名创建模型,然后调用其load()不带参数的方法

import spacy
import en_core_web_sm

nlp = en_core_web_sm.load()
doc = nlp("This is a sentence.")

📖有关更多信息和示例,请查看models documentation

⚒从源代码编译

安装Spacy的另一种方法是克隆其GitHub repository并从源头上建造它。如果您想要更改代码库,这是常用的方法。您需要确保您有一个由Python发行版组成的开发环境,其中包括头文件、编译器pipvirtualenvgit已安装。编译器部分是最棘手的。如何做到这一点取决于您的系统

站台
Ubuntu 通过以下方式安装系统级依赖项apt-getsudo apt-get install build-essential python-dev git
Mac 安装最新版本的XCode包括所谓的“命令行工具”。MacOS和OS X附带预装的Python和Git
窗口 安装一个版本的Visual C++ Build ToolsVisual Studio Express与用于编译Python解释器的版本相匹配

有关更多详细信息和说明,请参阅上的文档compiling spaCy from source以及quickstart widget获取适合您的平台和Python版本的正确命令

git clone https://github.com/explosion/spaCy
cd spaCy

python -m venv .env
source .env/bin/activate

# make sure you are using the latest pip
python -m pip install -U pip setuptools wheel

pip install -r requirements.txt
pip install --no-build-isolation --editable .

要与附加软件一起安装,请执行以下操作:

pip install --no-build-isolation --editable .[lookups,cuda102]

🚦运行测试

Spacy伴随着一个extensive test suite为了运行测试,您通常需要克隆存储库并从源代码构建空间。这还将安装在中定义的所需开发依赖项和测试实用程序requirements.txt

或者,您可以运行pytest在已安装的spacy包裹。别忘了也要通过Spacy的安装测试实用程序requirements.txt

pip install -r requirements.txt
python -m pytest --pyargs spacy