Skip to content

Instantly share code, notes, and snippets.

View harpone's full-sized avatar

Heikki Arponen harpone

View GitHub Profile
@harpone
harpone / keybase.md
Created March 25, 2023 09:26
keybase.md

Keybase proof

I hereby claim:

  • I am harpone on github.
  • I am harpone (https://keybase.io/harpone) on keybase.
  • I have a public key ASDFQqiM9-Yg0wVF3nsnOaVSan8jKCAgtTLccHHts8RhaQo

To claim this, I am signing this object:

@harpone
harpone / lru.py
Created March 23, 2023 20:11
LRU with self-attention
def forward_sequential(h, xs, U, W, nu, theta):
"""Forward pass through the network sequentially over input `xs` of any length.
NOTE: has no batch dimension. To be batched with `vmap`.
Args:
h (torch.tensor): shape [D_h, ]; previous state
xs (torch.tensor): shape [T, D_x]; input sequence
U (torch.tensor): Parameter matrix of shape [D_h, D_x]
W (torch.tensor): Parameter matrix of shape [D_h, D_x]
xi (torch.tensor): Parameter vector of shape [D_h, ]
@harpone
harpone / parallel.py
Created September 8, 2022 19:58
Parallel NN layer
# PARALLEL:
from contractpool import ContractPool # imaginary 'contractpool' library, similar to python's `multiprocessing`
W = parameter(M, N)
def forward(x_: float32[N]) -> float32:
# matrix-vector multiplication:
zs = float32[M] # let's imagine we have a float32 dtype in Vyper
with ContractPool(dot, M) as p:
p.map(W, x_, out=zs) # launches M subcontracts asynchronously, each subcontract writes values to zs
@harpone
harpone / serial.py
Created September 8, 2022 19:54
Serial 1 layer NN
# SERIAL:
W = parameter(M, N)
def forward(x_: float32[N]) -> float32:
# matrix-vector multiplication:
zs = float32[M] # let's imagine we have a float32 dtype in Vyper
for i, W_row in enumerate(W):
zs[i] = dot(W_row, x_) # 'dot' is an external smart contract
# summation:
@harpone
harpone / gist:677eea8f28289ff51cf2bc69ec63bf10
Created January 10, 2022 14:36
STM_longcovid_translation.txt
Long-lasting COVID-19 -
Consensus statement of the expert group appointed by STM on 31 December 2021
VN / 20672/2021
DRAFT 7.1.2022
@harpone
harpone / torchxla_webdataset_example.py
Created January 15, 2021 12:05
Test Webdataset with torch-xla multiprocessing distributed setting
from itertools import islice
import os
import torch
from torch.utils.data import DataLoader
from torchvision import transforms
import numpy as np
import torch_xla.distributed.parallel_loader as pl
import torch_xla.core.xla_model as xm
import torch_xla.distributed.xla_multiprocessing as xmp
@harpone
harpone / profile_openimages_dataload.py
Last active December 3, 2020 13:22
Testing/profiling webdataset data loading speed issue
from itertools import islice
from munch import Munch
import sys, os
from torch.utils.data import DataLoader
from torchvision import transforms
import time
import webdataset as wds
sys.path.append(os.getcwd())
@harpone
harpone / kl_divergence.py
Last active January 12, 2024 22:09
Differentiable k-nearest neighbor (Kozachenko-Leonenko) based estimates of KL-divergence and entropy
"""
MIT License
knn, kl_div, entropy Copyright (c) 2017 Heikki Arponen
"""
import torch
def knn(x, y, k=3, last_only=False, discard_nearest=True):
@harpone
harpone / lamb.py
Created September 24, 2020 12:25
Lamb optimizer that doesn't work on TPUs
class Lamb(Optimizer):
r"""Implements Lamb algorithm.
It has been proposed in `Large Batch Optimization for Deep Learning: Training BERT in 76 minutes`_.
Arguments:
params (iterable): iterable of parameters to optimize or dicts defining
parameter groups
lr (float, optional): learning rate (default: 1e-3)
betas (Tuple[float, float], optional): coefficients used for computing
running averages of gradient and its square (default: (0.9, 0.999))
eps (float, optional): term added to the denominator to improve
class GCSDataset(Dataset):
"""Generic PyTorch dataset for GCS. Streams data from GCS and (optionally) caches to local disk.
"""
def __init__(self,
bucketname=None,
path_list=None, # TODO: list bucket/path contents if None
target_list=None,
transform=None,