I am also somewhat new to this, but I believe your error is because your block(in_, out, Activation) function is defined as a nested function inside init() and according to the discussion at Python: pickling nested functions - Stack Overflow 6 python can not pickle nested functions.
A solution would be to move def block out into the class scope like this:
class Generator(nn.Module):
    def __init__(self, latent_dim, output_dim, binary=True):
        super(Generator, self).__init__()

        self.layer_0 = block(latent_dim, latent_dim, nn.Tanh if binary else lambda: nn.LeakyReLU(0.2))
        self.layer_1 = block(latent_dim, latent_dim, nn.Tanh if binary else lambda: nn.LeakyReLU(0.2))
        self.layer_2 = block(latent_dim, output_dim, nn.Tanh if binary else lambda: nn.LeakyReLU(0.2))

    def forward(self, noise):
        noise = self.layer_0(noise) + noise
        noise = self.layer_1(noise) + noise
        noise = self.layer_2(noise)
        return noise

    def block(in_, out, Activation):
        return nn.Sequential(
            nn.Linear(in_, out, bias=False),
            nn.LayerNorm(out),
            Activation(),
        )