Your code should yield different results, since you are only seeding the code once.
Each call into the pseudorandom number generator would yield a new random number.
Seeding will make sure that the sequence of these pseudorandom numbers is reproducible, but won’t yield the same numbers for random calls:
torch.manual_seed(2809)
print(torch.randn(2))
> tensor([-2.0748,  0.8152])
print(torch.randn(2))
> tensor([-1.1281,  0.8386])

torch.manual_seed(2809)
print(torch.randn(2))
> tensor([-2.0748,  0.8152])
print(torch.randn(2))
> tensor([-1.1281,  0.8386])

If you want to use the seed to initialize both models with the same random values, you would have to re-seed the code:

torch.manual_seed(2809)
modelA = models.resnet18()
torch.manual_seed(2809)
modelB = models.resnet18()


x = torch.randn(8, 3, 224, 224)

outA = modelA(x)
outB = modelB(x)
print((outA - outB).abs().max())
> tensor(0., grad_fn=<MaxBackward1>)