You can use any() built-in here with a Python Dictionary Comprehension:
>>> {k: v1 for k, v1 in nest_dic.items() if any(v2 is not None for v2 in v1.values())}
{'dict_1': {'hello': 'world', 'python': 'programming'}, 'dict_2': {'tech': 'geekbuzz', 'OS': None}}
Which keeps sub dictionaries that have any value that is not None.
You could also use the all() built-in function here as well:
>>> {k: v1 for k, v1 in nest_dic.items() if not all(v2 is None for v2 in v1.values())}
{'dict_1': {'hello': 'world', 'python': 'programming'}, 'dict_2': {'tech': 'geekbuzz', 'OS': None}}
Which keeps Which keeps sub dictionaries that all don't have values that are None.
Also as a side note for None comparisons, from Programming Recommendations in PEP 8:
Comparisons to singletons like None should always be done with is or is not, never the equality operators.
Also, beware of writing if x when you really mean if x is not None — e.g. when testing whether a variable or argument that defaults to None was set to some other value.  The other value might have a type (such as a container) that could be false in a boolean context!