The code below is the spiritual TFP equivalent to your PyMC model. I used JointDistributionCoroutine instead of Sequential, since it’s a bit easier to write for loops therein. There’s a bug in the turnkey sampling routine at present; I’ve raised the issue with the team and will circle back when we have a solution. Meanwhile, this is the rough idea!
a_b =  np.array([
       [3, 4, 6, 1, 5, 2, 9, 7],
       [1, 2, 8, 4, 5, 3, 9, 6],
       [2, 2, 3, 1, 5, 5, 9, 8],
       [2, 1, 8, 2, 9, 3, 8, 8],
       [2, 4, 9, 1, 4, 3, 5, 5],
       [1, 2, 9, 1, 3, 5, 5, 4]]).astype(np.float32)

a_w =  np.array([
      [ 7, 6, 4, 9, 5, 8, 1, 3],
      [ 9, 8, 2, 5, 4, 5, 1, 3],
      [ 8, 8, 5, 9, 5, 5, 1, 2],
      [ 8, 9, 2, 8, 1, 8, 2, 2],
      [ 8, 6, 1, 9, 6, 7, 4, 4],
      [ 9, 8, 1, 9, 7, 5, 5, 6]]).astype(np.float32)

aw_tc = np.sum(a_w, axis=1)
ab_tc = np.sum(a_b, axis=1)
dm_no, c_no = a_w.shape

@tfd.JointDistributionCoroutine
def model():
  w_star = yield tfd.Dirichlet(concentration=1. * np.ones(c_no, dtype=np.float32), name='w_star')
  beta_agg = yield tfd.Gamma(concentration=2., rate=2., name='beta_agg')
  for i in range(dm_no):
    w = yield tfd.Dirichlet(concentration=beta_agg * w_star, name=f'w{i}')
    aw = yield tfd.Multinomial(total_count=aw_tc[i], probs=w, name=f'aw{i}')
    ab = yield tfd.Multinomial(total_count=ab_tc[i], probs = 1 / w, name=f'ab{i}')

pin_values = dict(([
  (f'aw{i}', a_w[i, :]) for i in range(dm_no)
] + [
  (f'ab{i}', a_b[i, :]) for i in range(dm_no)
]))
pinned = model.experimental_pin(**pin_values)

results = tfp.experimental.mcmc.windowed_adaptive_hmc(
    n_draws=100,
    joint_dist=pinned,
    num_leapfrog_steps=10,
    n_chains=100,
    num_adaptation_steps=300)