error
28_DirichletMultinomialLogLikelihood.py
started
2026-05-02T22:17:06Z
reference PyTorch source (the prompt the agent sees)
import torch
import torch.nn as nn
class Model(nn.Module):
"""
Log-likelihood under the Dirichlet-Multinomial (Polya) distribution.
Given count vectors n and concentration parameters alpha, computes
log p(n | alpha) using the log-gamma formulation. Core computation
in Bayesian topic models and mixed-membership models.
"""
def __init__(self, vocab_size):
super().__init__()
self.vocab_size = vocab_size
self.log_alpha = nn.Parameter(torch.zeros(vocab_size))
def forward(self, counts: torch.Tensor) -> torch.Tensor:
"""
Args:
counts: (B, V) – integer count vectors (as float for differentiability)
Returns:
log_lik: (B,) – log p(counts | alpha) for each sample
"""
alpha = torch.exp(self.log_alpha).unsqueeze(0) # (1, V)
N = counts.sum(-1) # (B,)
alpha_sum = alpha.sum(-1) # (1,)
# log p(n | alpha) = log Gamma(alpha_sum) - log Gamma(N + alpha_sum)
# + sum_v [ log Gamma(n_v + alpha_v) - log Gamma(alpha_v) ]
log_lik = (
torch.lgamma(alpha_sum)
- torch.lgamma(N + alpha_sum)
+ (torch.lgamma(counts + alpha) - torch.lgamma(alpha)).sum(-1)
)
return log_lik
vocab_size = 256
batch_size = 512
def get_inputs():
bs = popcorn_pri.jitter_int(batch_size)
counts = torch.randint(0, 10, (bs, vocab_size)).float()
return [counts]
def get_init_inputs():
return [vocab_size]
turn 0133.2s turn · 133.2s LLM · 0.0s tools
reasoning
We need to write a custom CUDA kernel for the forward computation of the Dirichlet-Multinomial log-likelihood. The reference model is:
```
alpha = exp(log_alpha).unsqueeze(0) # (1, V)
N = counts.sum(-1) # (B,)
alpha_sum = alpha.sum(-1) # (1,)
log_lik = (
lgamma(alpha_sum) - lgamma(N + alpha_sum)
+ (lgamma(counts + alpha) - lgamma(alpha)).sum(-1)
)
```
counts is float but integer-valued. V=256, B=512.
We need to write a custom CUDA kernel and a Python wrapper class `ModelNew`.
First, let's get GPU specs.
call → get_gpu_specs
callget_gpu_specs
{}
result ← get_gpu_specs (ok)
okget_gpu_specs
GPU specs for NVIDIA H100 80GB HBM3:
total memory (runtime): 79.1 GB
spec entry: H100
GPU Architecture: Hopper
GPU Memory: 80GB
Memory Bandwidth: 3.35 TB/s
FP64 TFLOPS: 34
FP64 Tensor Core TFLOPS: 67
FP32 TFLOPS: 67
TF32 Tensor Core TFLOPS: 989 with sparsity
BFLOAT16 Tensore Core TFLOPS: 1979 with sparsity
FP16 Tensor Core TFLOPS: 1979 with sparsity
FP8 Tensor Core TFLOPS: 3958 with sparsity
INT8 Tensor Core TOPS: 3958 with sparsity
Register File Size: 64K 32-bit registers per SM
Maximum number of registers per thread: 255
Maximum number of thread blocks per SM: 32
Shared memory capacity per SM: 228 KB
Maximum shared memory per thread block: 227 KB
turn 17066.7s turn · 7066.7s LLM · 0.0s tools
feedbackLLM call failed: _WorkItemTimeout: work item exceeded soft timeout budget