Drain the beans. Combine the beans, 8 cups fresh water, onions, garlic, and ginger in a soup pot and bring to a boil over medium heat. Skim off any foam that rises to the top. Cover, reduce the heat, and simmer until the beans are very tender, about 2 hours.
Let the beans cool slightly, then puree in a blender or food processor or strain through a food mill. Return to the pot and add the cumin, salt, cardamom and coriander. Simmer for at least 30 minutes. Taste and adjust the seasoning.
Just before serving, stir in the coconut milk and cilantro. Serve hot. Do not allow the soup to boil once the coconut milk has been added.